SiteMesh - Building SiteMesh Decorators
Once SiteMesh has been installed and configured, you can begin writing decorators for your web application.
IntroductionDecorators are the pages that "decorate" the original, requested page (the page that is handed to the SiteMesh filter from the web container). Most (HTML) decorators are a combination of:
- meta tags (keywords, description, author)
- stylesheet (CSS)
- copyright notice
Web Application Structure
Here is an example structure of a web application. This is not needed for SiteMesh to work.
Directory containing all decorator files (e.g.
Directory containing all files to be included into other files (e.g.
Directory containing all images (e.g.
Directory containing all .CSS styles (e.g.
- Define a stylesheet to use in the entire application and include it using this script.
- Use includes in your decorators (e.g.
- Try not to refer to the absolute root ("
/") path. Use
<%=request.getContextPath()%>/instead. This will make life easier when moving your web application under another context path.
- Making your decorators compatible with multiple browsers (IE, Mozilla, Opera, ...) will (probably) make your entire application (all decorated pages) compatible.
- Be careful when using frames, because decorators may NOT be applied to frames (FrameSetDecoratorMapper).
My First DecoratorBasically, all you need to know is what decorator tags you can use. The title, head and body tags are most used.
Here is an example of a decorator (save it as /decorators/main.jsp):
2: % This is the main decorator for all SOMECOMPANY INTRANET pages.
3: % It includes standard caching, style sheet, header, footer and copyright notice.
5: <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
6: <%@ include file="/includes/cache.jsp" %>
7: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
10: <title><decorator:title default="INTRANET" /></title>
11: <decorator:head />
12: <%@ include file="/includes/style.jsp" %>
14: <body bgcolor="#FFFFFF" background="<%=request.getContextPath()%>/images/bg.gif">
16: <%@ include file="/includes/header.jsp"%>
17: <table width="100%" border="0" cellspacing="0" cellpadding="0">
19: <td height="20" nowrap> </td>
22: <td width="1%" nowrap> </td>
23: <td width="16%" valign="top" nowrap>
24: <%@ include file="/includes/navigation.jsp" %>
26: <td width="2%" nowrap> </td>
27: <td valign="top">
30: <div class="docBody"><decorator:body /></div>
32: <td width="1%" nowrap> </td>
36: <%@ include file="/includes/footer.jsp" %>
37: <%@ include file="/includes/copyright.jsp" %>
- Line 1-4:
An explanation of the decorator. This way different people working on the decorator are quickly up to speed.
- Line 5:
This is needed for the
decorator:tags to work (also needed on all pages that work with inline decorators (page:applyDecorator).
- Line 6:
Sets the necessary response headers to let the browser cache the page. Omit this line if your application is real dynamic (changing data).
- Line 10:
If the requested page doesn't have a title, the default title is used ("INTRANET").
- Line 15:
The status bar gets a message when the page is loading.
- Line 30:
The entire body of the requested page has the
docBodyclass. This way the navigation and body do not have to have the same font.
WEB-INF/decorators.xml with your favorite editor
and let SiteMesh know there is a decorator (with a mapping):
<decorators defaultdir="/decorators"> <decorator name="main" page="main.jsp"> <pattern>/*</pattern> </decorator> </decorators>
Now deploy the web application, go to the welcome page, and the main decorator will be applied.
More examples are included with the SiteMesh distribution, under the src/example-webapp directory. If the examples don't give you enough to go on, take a look at SiteMesh in action, download the petsoar-app at http://www.wiley.com/legacy/compbooks/walnes/.