Developer Tools
JDeveloper
Written By Duncan Mills, Oracle Corporation
July 2004
Tiles is a technology that is widely used in conjunction with the Apache Struts Page flow controller used by the Oracle ADF framework. Tiles provides a way of defining Page fragments or "tiles" which can be assembled into a complete page at runtime. This allows you to define the common part of your applications such as page headers and menus just once as reusable tiles, rather than repeating such common information in every page definition. Tiles is, in principle, similar to technologies such as JSP or JSTL include files.
Tiles can be assembled into a template page using conventional JSP tags from the Struts <tiles> tag library or by using an XML definition of a page which offers a more manageable reuse model with capabilities for reusing and extending definitions throughout the application.
This paper assumes the reader already has a working knowledge of Tiles, however, if you are not yet familiar with Tiles and would like to learn more then the following articles will provide a good introduction.
Tiles and ADF Working Together
Tiles can be successfully integrated with ADF data bound pages, but care must be taken to make sure that events such as page submissions go to the correct place. A common problem is using a DataPage with a Form on it as a tile. When the Form is submitted the submission goes to the DataPage itself rather than the while Tile set, so the chrome provided by the surrounding tiles is lost. The best approach when using tiles is to let the DataPage action be the top level entry point to a tile set, this has the advantage of removing the requirement to edit the JSP pages to redirect links and Form Actions, and also means that the DataPage can also be used to prepare data for binding onto any of the Tiles in the tile set.
Creating a DataPage for Use in a Tile Set.
<tiles-definitions xmlns="http://jakarta.apache.org/struts/dtds/tiles-config_1_1">
<definition name="base.page" path="/templates/template.jsp">
<put name="title" value="Not Used Directly"/>
<put name="header" value="/tiles/header.jsp"/>
<put name="footer" value="/tiles/footer.jsp"/>
<put name="content" value=""/>
</definition>
...
<definition name="departments.edit" extends="base.page">
<put name="title" value="Edit Department- Databound Screen"/>
<put name="content" value="/deptEdit.jsp"/>
</definition>
</tiles-definitions>
<action path="/deptEdit"
className="oracle.adf.controller.struts.actions.DataActionMapping"
type="oracle.adf.controller.struts.actions.DataForwardAction"
name="DataForm"
parameter="/deptEdit.jsp">
<set-property property="modelReference" value="deptEditUIModel"/>
<forward name="Submit" path="/deptView.do"/>
</action>
<action path="/deptEdit"
className="oracle.adf.controller.struts.actions.DataActionMapping"
type="oracle.adf.controller.struts.actions.DataForwardAction"
name="DataForm"
parameter="departments.edit">
<set-property property="modelReference" value="deptEditUIModel"/>
<forward name="Submit" path="/deptView.do"/>
</action>
Now when you run or submit to the DataPage, the model integration will take place, and the required data placed on the request, after which the DataPage will forward to display the entire tiles set rather than just the original data bound JSP. This also means that you can use JSTL expressions on other tiles within the set to bind to data that the DataPage is preparing.
Simplifying the Editing of Tiles Definition Files
To help you in editing the tiles definition XML file you can register an XML schema with JDeveloper and associate this with your tiles definition. This will provide support for the tiles definition in the Structure Pane, Property Inspector and the XML editor itself with code insight and completion. An XML schema is not provided in the basic Struts distribution from Apache (it only comes with a DTD file). However, a XSD, created from the DTD is available on OTN for you to use. The figure below shows an extract from the XSD file shown in the JDeveloper XSD editor.
Installing the Schema in JDeveloper
To install the XSD file you will need to carry out the following steps
Restrictions in 9.0.5.n of Oracle JDeveloper 10g
With the current release of JDeveloper, the page flow diagram is not set up to handle Tiles (XML) definition references directly. Thus an Action definition such as:
<action path="/logon" forward="logon.view"/>
Will not display correctly on the diagram and the Action will show with the following icon
, indicating that the Struts Diagram cannot find the underlying page.
Additionally if you try and create a Forward which uses an XML Tiles definition as the path attribute then additional "phantom" pages will be created on the diagram .
To avoid this problem you can either choose to work without the diagram enabled (see the technical tip "
Suppressing the Struts Page Flow Diagram" on OTN) or you can define ActionForwards for each Tiles definition you will need as Forward targets in the flow. If you choose this technique then the flow will be correctly represented in the diagram, however, the ActionForwards will still be shown with the warning icon. Future versions of JDeveloper will recognize Tiles definitions as valid forward targets.
| Note: A simple sample application showing Databound pages as tiles is available here |
drmills v1.0 28/July/2004