Recipe14.6.Using Tiles in a Modular Application


Recipe 14.6. Using Tiles in a Modular Application

Problem

You are using Struts modules, and you want to define module-specific Tiles definitions.

Solution

Create a separate Tiles definitions file for each module. Then, in each module's Struts configuration file, configure the TilesPlugin, as shown in Example 14-10, to use that module's definitions file and be module-aware.

Example 14-10. Configuring Tiles for a specific module
<plug-in className="org.apache.struts.tiles.TilesPlugin" >     <!-- Path to XML definition file -->     <set-property property="definitions-config"                      value="/WEB-INF/tiles-defs-module1.xml" />     <!-- Set Module-awareness to true -->     <set-property property="moduleAware" value="true" /> </plug-in>

Discussion

Like configuration files for the Struts Validator, you can separate your Tiles definitions into multiple files. If you are using modules, you can create Tiles definitions, which can only be accessed from within a specific module, by declaring that definition file in the module's Struts configuration file. To ensure that Tiles handles module-relative paths when it processes requests, you must set the moduleAware property to TRue. By being module-aware when you forward to a definition, the definition name will be pulled from the definitions for that module. Definition names have to be unique within a module.

Suppose your application has two modules: the default module and an administration module. The struts-config-admin.xml file, shown in Example 14-11 configures the administration module.

Example 14-11. Struts configuration file for a module
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config>     <action-mappings>         <action              path="/doStartPage"             forward=".start"/>     </action-mappings>     <plug-in className="org.apache.struts.tiles.TilesPlugin" >         <set-property property="definitions-config"                          value="/WEB-INF/tiles-defs-admin.xml" />         <set-property property="moduleAware" value="true" />     </plug-in> </struts-config>

You can specify the Tiles definitions used by the administration module in the tiles-defs-admin.xml file shown in Example 14-12.

Example 14-12. Module-specific Tiles definition file
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE tiles-definitions PUBLIC        "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"        "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <tiles-definitions>     <definition name="adminLayout" path="/layouts/adminLayout.jsp">         <put name="title" value="Struts Cookbook - Chapter 14 : Tiles"/>         <put name="body"   type="string"/>     </definition>     <definition name=".start" extends="adminLayout">         <put name="title" value="Admin Start Page"/>         <put name="body"  value="/pages/adminMain.jsp"/>     </definition> </tiles-definitions>

The paths used in a Tiles definition file are treated as context-relative even if that definition is used for a specific module.


See Also

This topic has been discussed on the struts-user mailing list. One particular thread you may find helpful is archived at http://marc.theaimsgroup.com/?l=struts-user&m=109579114312336&w=2.

If you are unfamiliar with Struts modules, see Recipe 2.5.



    Jakarta Struts Cookbook
    Jakarta Struts Cookbook
    ISBN: 059600771X
    EAN: 2147483647
    Year: 2005
    Pages: 200

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net