jsp
Header Header Header
.
Limitations:
Duplication of code, the same Header and Footer is included in all three
pages.
Solution:
Separate, Header and Footer from each page.
Use < jsp:include > tag for inserting Header.jsp and Footer.jsp.
Header.jsp Footer.jsp
Page1.jsp Page2.jsp Page3.jsp
Limitations:
The same table structure (ie layout) is repeated in all the three pages.
Solution :
Separate layout from each page, and provide placeholders
Include the layout in the required page using < tiles:insert page=”/Layout.jsp”>
Populate the pages required using <tiles:put>
Layout.jsp
<table>
<tr><td>
<tiles:insert attribute=”header”>
</td></tr>
<tr><td>
<tiles:insert attribute=”body”>
</td></tr>
<tr><td>
<tiles:insert attribute=”footer”>
</td></tr></table>
Header.jsp Footer.jsp
Page1.jsp
<tiles:insert page=”/Layout.jsp”>
<tiles:put type=”header”
value=”/Header.jsp”>
<tiles:put type=”footer”
value=”/Footer.jsp”>
</tiles:insert>
Page2.jsp Page3.jsp
<!—write Page2 body here -- > <!—write Page3 body here -- >
</tiles:insert> </tiles:insert>
Limitations:
Suppose the layout is changed to below given then we need to make changes in
Layout.jsp, and in all the jsp pages which make use of Layout.jsp
Header
Menu
Body
Footer
Solution:
Using tiles-defs.xml define all the jsp pages
Using <tiles:insert definition=>populate the jsp pages
Layout.jsp
<table>
<tr><td>
<tiles:insert attribute=”header”>
</td></tr>
<tr><td>
<tiles:insert attribute=”body”>
</td></tr>
<tr><td>
<tiles:insert attribute=”footer”>
</td></tr></table>
Header.jsp Footer.jsp
<!—tiles-defs.xml -- >
<tiles-definition>
<definition name=”def1” path=”/Layout.jsp”>
<put name=”header” value=”/Header.jsp”>
<put name=”menu” value=”/Menu.jsp”>
<put name=”body” value=”/Body1.jsp”>
<put name=”footer” value=”/Footer.jsp”>
</definition>
<definition name=”def2” path=”/Layout.jsp”>
<put name=”header” value=”/Header.jsp”>
<put name=”menu” value=”/Menu.jsp”>
<put name=”body” value=”/Body2.jsp”>
<put name=”footer” value=”/Footer.jsp”>
</definition>
</tiles-definition>
Body1.jsp Body2.jsp Menu.jsp
Page1.jsp Page2.jsp
<tiles:insert <tiles:insert
definition=”def1”> definition=”def2”>
Limitation:
In tiles-defs.xml the definition tab has repeated
<put name=”header” value=”/Header.jsp”>
<put name=”menu” value=”/Menu.jsp”>
<put name=”footer” value=”/Footer.jsp”> tags
Solution:
Use <definition extends=> to extend the properties of base definition
<!—tiles-defs.xml -- >
<tiles-definition>
<definition name=”basedef” path=”/Layout.jsp”>
<put name=”header” value=”/Header.jsp”>
<put name=”menu” value=”/Menu.jsp”>
<put name=”body” value=””>
<put name=”footer” value=”/Footer.jsp”>
</definition>
<definition name=”def1” extends=”basedef”>
<put name=”body” value=”/Body1.jsp”>
</definition>
<definition name=”def2” extends=”basedef”>
<put name=”body” value=”/Body2.jsp”>
</definition>
</tiles-definition>