Hi All, >From my research into tiles it looks like the recommended way to use tiles with a Struts app is to create an action as follows
<action path="/start" type="com.sample.action.SuccessAction"> <forward name="success" path="login.layout" /> </action> This specifies the forward path to "login.layout" which will then be looked up in the tiles-def.xml In this file the definition can extend from a more generic definition and insert what properties it needs to set e.g. title, body. <definition name="nomenu.layout" path="/WEB-INF/jsp/noMenuLayout.jsp"> <put name="header" value="/WEB-INF/jsp/header.jsp" /> <put name="footer" value="/WEB-INF/jsp/footer.jsp" /> </definition> <definition name="login.layout" extends="nomenu.layout"> <put name="title" value="Login" /> <put name="body" value="/WEB-INF/jsp/login.jsp" /> </definition> This approach requires an additional tiles definition for each mapping in struts-config.xml, even though the only difference between the definitions will be the new body parameter As a result, in my experience the tiles-def.xml file can become quite large. I've come across an approach which would reduce the size of the tiles-def.xml and which I would like to get feedback from the open source community on. It is based around the possibility of creating a generic tiles definition where the body parameter would be inserted dynamically at run time and therefore remove the need to specify a new definition for each mapping. This involves creating an action mapping as follows <action path="/start" type="com.sample.action.SuccessAction"> <forward name="success" path="nomenu.layout" className="com.sample.action.TilesActionForward"> <set-property property="tilesParameter" value="body=/WEB-INF/jsp/login.jsp" /> </forward> </action> The mapping specifies the path as the tiles definition to look up in the tiles-def. However it also specifies an ActionForward class of TilesActionForward. TilesActionForward extends org.apache.struts.action.ForwardingActionForward and provides a setter for the tilesParameter property. This forward is placed on the request and is later used when the tiles definition is being implemented. In the tiles-def.xml file, the following definition is defined <definition controllerClass="com.sample.struts.tiles.CustomTilesController" name="nomenu.layout" path="/WEB-INF/jsp/noMenuLayout.jsp"> <put name="header" value="/WEB-INF/jsp/header.jsp" /> <put name="footer" value="/WEB-INF/jsp/footer.jsp" /> <put name="body" value="" /> </definition> Where a custom controller CustomTilesController which extends org.apache.struts.tiles.ControllerSupport. is used. This controller retrieves the forward from the request and dynamically inserts the tilesParameter into the definition. This leads to a extremely clean tiles-def.xml with only a few definitions defined. Overall this looks like a viable alternative. The action mappings and associated forward specifies the layout and the jsp pages to use for the tiles implementation. In the tiles-def.xml files, only a few mappings need to be specified with the CustomTilesController doing most of the work to dynamically inserted the required JSP page. I would like to get your opinion on both approaches. Is option 1 the recommended solution for implementing tiles in a struts based app? Is option 2 a viable solution for implementing tiles in a struts based app? Do the benefits of a cleaner tiles definition file override some extra configuration in struts-config? Can you see any flaws with this approach? Is there some way of implementing option two with the components already in Struts 1.2 or 1.3? Any feedback appreciated. Thanks, Michael