Es ist wichtig zu verstehen, dass Freemarker absichtlich Kenntnis des Kontextes nicht haben soll, in dem es verwendet wird, um es mehr Generika. Das bedeutet, dass es im Gegensatz zu JSPs standardmäßig keinen Zugriff auf die Objekte HttpServletRequest und Response hat. Wenn Sie Zugriff darauf haben möchten, müssen Sie es bereitstellen.
Die Art, wie ich dieses Problem gelöst war ein Servlet-Filter zu erstellen, um das HttpServletRequest Objekt als Antrag Attribut hinzufügen, die Freemarker Zugriff hat.
/**
* This simple filter adds the HttpServletRequest object to the Request Attributes with the key "RequestObject"
* so that it can be referenced from Freemarker.
*/
public class RequestObjectAttributeFilter implements Filter
{
/**
*
*/
public void init(FilterConfig paramFilterConfig) throws ServletException
{
}
public void doFilter(ServletRequest req,
ServletResponse res, FilterChain filterChain)
throws IOException, ServletException
{
req.setAttribute("RequestObject", req);
filterChain.doFilter(req, res);
}
public void destroy()
{
}
}
Sie müssen dies in Ihrem web.xml definieren, um für sie arbeiten:
<filter>
<filter-name>RequestObjectAttributeFilter</filter-name>
<filter-class>com.foo.filter.RequestObjectAttributeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RequestObjectAttributeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Dann in meiner .ftl Dateien, ich folgendes verwenden:
${Request.RequestObject.getServerName()}
Freemarker nicht pagecontext haben, jedoch habe ich Request-Objekt. Wie kann ich Hostnamen von ihm erhalten? –