Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I remember I solved the same problem in two projects. Your second approach is almost right (<code>FreeMarkerViewResolver</code>), but if I remember correctly I also had to extend from <code>FreeMarkerView</code> and <code>TilesView</code> to explicitly bridge both models together.</p> <p>Custom Tiles view:</p> <pre><code>public class CustomTilesView extends TilesView { @Override protected void exposeModelAsRequestAttributes(Map model, HttpServletRequest request) { request.setAttribute(CustomFreeMarkerView.MODEL_KEY, model); } } </code></pre> <p>Custom FreeMarker view:</p> <pre><code>public class CustomFreeMarkerView extends FreeMarkerView { public static final String MODEL_KEY = FreeMarkerView.class.getName() + ".MODEL"; @Override protected void exposeHelpers(Map model, HttpServletRequest request) throws Exception { super.exposeHelpers(model, request); final Map savedModel = (Map) request.getAttribute(MODEL_KEY); if (savedModel != null) { mergeModels(model, savedModel); } } private void mergeModels(Map&lt;String, Object&gt; targetModel, Map&lt;String, Object&gt; recipientModel) throws ServletException { for (Map.Entry&lt;String, Object&gt; entry : recipientModel.entrySet()) { String key = entry.getKey(); if (targetModel.containsKey(key)) { throw new ServletException("Cannot merge models because of an existing model object of the same name: " + key); } targetModel.put(key, entry.getValue()); } } } </code></pre> <p>Register both in Spring:</p> <pre><code>&lt;bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:viewClass="com.my.CustomTilesView" p:contentType="text/html;charset=UTF-8"/&gt; &lt;bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" p:suffix=".ftl" p:exposeSpringMacroHelpers="true" p:viewClass="com.my.CustomFreeMarkerView" p:contentType="text/html;charset=UTF-8"/&gt; </code></pre> <p>Should work.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload