È importante capire che Freemarker è intenzionalmente progettato per non conoscere il contesto in cui è utilizzato, per renderlo più generico. Ciò significa che, diversamente dai JSP, non ha accesso agli oggetti HttpServletRequest e Response per impostazione predefinita. Se vuoi che abbia accesso, dovrai fornirlo.
Il modo in cui ho risolto questo problema era creare un filtro servlet per aggiungere l'oggetto HttpServletRequest come attributo di richiesta a cui Freemarker ha accesso.
/**
* 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()
{
}
}
È necessario definire questo nel vostro web.xml in modo per farlo funzionare:
<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>
Poi, nei miei file .ftl, posso utilizzare il seguente:
${Request.RequestObject.getServerName()}
fonte
2015-03-25 18:48:26
Freemarker non ha pageContext, tuttavia ho oggetto Request. Come posso ottenere l'hostname da esso? –