I have a web application running with Spring Webflow, Tiles and JSP.
Currently all pages are extending my “defaultLayout” definition (which has a banner, menu structure, footer, etc.).
In tiles definition file:
<definition name="defaultLayout" template="/WEB-INF/tiles/defaultLayout.jsp"/>
<definition name="_**.view.jsp" extends="defaultLayout">
<put-attribute name="content" value="{1}.view.jsp"/>
</definition>
A new requirement is to have an “embedded” view (without footer/menu/etc.). I created an embedded view definition:
<definition name="embeddedLayout" template="/WEB-INF/tiles/embeddedLayout.jsp"/>
<definition name="_**.embedded.view.jsp" extends="embeddedLayout">
<put-attribute name="content" value="{1}.view.jsp"/>
</definition>
I have JSP files that specify the main content of a page (all named: pageName.view.jsp).
Now what I need is some way to let tiles render pageName.embedded.view.jsp (which will use embeddedLayout) instead of pageName.view.jsp based on a certain requirement (haven’t figured out that yet probably a request parameter passed in or something to that effect).
I am not too familiar with the inner workings of tiles What class can I override to change pageName.view.jsp to rather be pageName.embedded.view.jsp?
Here are my relevant Spring configuration:
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles-defs.xml</value>
</list>
</property>
</bean>
<bean id="webflowViewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
<property name="viewResolvers">
<bean class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
<property name="viewClass" value="org.springframework.webflow.mvc.view.FlowAjaxTilesView"/>
<property name="prefix" value="_"/>
</bean>
</property>
</bean>
Any help will be appreciated.
Tiles version: 2.2.1
Spring version: 3.0.3
Webflow version: 2.1.1
In the end I did the following which solved my problem (hopefully this will help others with a similar problem):
I decided that everything that has /embedded/ in the context path should use the embedded tile layout.
I extended
org.springframework.js.ajax.AjaxUrlBasedViewResolverto check if the incoming request (retrieved using Spring’sRequestContextHolder) contains/embedded/. If it does it changes theviewNameto bewhatever.embedded.view.jsp(instead of justwhatever.view.jsp. It is then rendered using the embedded layout.This solves my problem.