Note that there are some explanatory texts on larger screens.

plurals
  1. POAccessing Spring beans from a Tiles view (JSP)
    primarykey
    data
    text
    <p>In Spring MVC I can access my beans in JSP using JstlView's exposedContextBeanNames (or exposeContextBeansAsAttributes). For example, then, in my JSP I can write (${properties.myProperty). But when the same JSP is a part of a tiles view, these properties aren't accessible. Is possible to configure Tiles properly or access these properties in another way?</p> <p>I'm using Spring MVC 3.0.2 and Tiles 2.2.1. Here's a bit of my configuration:</p> <pre><code>&lt;bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"&gt; &lt;property name="order" value="1"/&gt; &lt;property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /&gt; &lt;/bean&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&gt; &lt;property name="order" value="2"/&gt; &lt;property name="prefix" value="/WEB-INF/views/"/&gt; &lt;property name="suffix" value=".jsp"/&gt; &lt;property name="exposedContextBeanNames"&gt; &lt;list&gt;&lt;value&gt;properties&lt;/value&gt;&lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; </code></pre> <p><strong>EDIT:</strong> I've implemented Skaffman's solution.</p> <p>TilesExposingBeansViewResolver.java:</p> <pre><code>package es.kcsolutions.util.spring.servlet.view; import org.springframework.web.servlet.view.*; public class TilesExposingBeansViewResolver extends UrlBasedViewResolver { private Boolean exposeContextBeansAsAttributes; private String[] exposedContextBeanNames; public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes) { this.exposeContextBeansAsAttributes = exposeContextBeansAsAttributes; } public void setExposedContextBeanNames(String[] exposedContextBeanNames) { this.exposedContextBeanNames = exposedContextBeanNames; } @Override protected AbstractUrlBasedView buildView(String viewName) throws Exception { AbstractUrlBasedView superView = super.buildView(viewName); if (superView instanceof TilesExposingBeansView) { TilesExposingBeansView view = (TilesExposingBeansView) superView; if (this.exposeContextBeansAsAttributes != null) view.setExposeContextBeansAsAttributes(this.exposeContextBeansAsAttributes); if (this.exposedContextBeanNames != null) view.setExposedContextBeanNames(this.exposedContextBeanNames); } return superView; } } </code></pre> <p>TilesExposingBeansView.java:</p> <pre><code>package es.kcsolutions.util.spring.servlet.view; import java.util.*; import javax.servlet.http.*; import org.springframework.web.context.support.ContextExposingHttpServletRequest; import org.springframework.web.servlet.view.tiles2.TilesView; public class TilesExposingBeansView extends TilesView { private boolean exposeContextBeansAsAttributes = false; private Set&lt;String&gt; exposedContextBeanNames; public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes) { this.exposeContextBeansAsAttributes = exposeContextBeansAsAttributes; } public void setExposedContextBeanNames(String[] exposedContextBeanNames) { this.exposedContextBeanNames = new HashSet&lt;String&gt;(Arrays.asList(exposedContextBeanNames)); } protected HttpServletRequest getRequestToExpose(HttpServletRequest originalRequest) { if (this.exposeContextBeansAsAttributes || this.exposedContextBeanNames != null) return new ContextExposingHttpServletRequest(originalRequest, getWebApplicationContext(), this.exposedContextBeanNames); return originalRequest; } @Override protected void renderMergedOutputModel(Map&lt;String, Object&gt; model, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest requestToExpose = getRequestToExpose(request); exposeModelAsRequestAttributes(model, requestToExpose); super.renderMergedOutputModel(model, requestToExpose, response); } } </code></pre> <p>Spring configuration:</p> <pre><code> &lt;bean id="tilesViewResolver" class="es.kcsolutions.util.spring.servlet.view.TilesExposingBeansViewResolver"&gt; &lt;property name="order" value="1"/&gt; &lt;property name="viewClass" value="es.kcsolutions.util.spring.servlet.view.TilesExposingBeansView"/&gt; &lt;property name="exposedContextBeanNames"&gt; &lt;list&gt;&lt;value&gt;properties&lt;/value&gt;&lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; </code></pre> <p>If you have some problem, take a look at TilesExposingBeansView.renderMergedOutputModel. I've made some tests, but maybe it's necessary to make a lot more.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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