SiteMesh - Velocity Decorators
As of SiteMesh 2.0.2 Velocity (.vm) decorators are supported.Here is an example of how such a decorator (e.g. /decorators/main.vm) might look like:
#parse ("/includes/decorators/header.vm")
<h2>$title</h2>
$head
<img src="$base/images/logo.gif" border="0">
<td valign="top" class="body">
<div class="header">
<span class="pagetitle">$title</span>
</div>
$body
</td>
#parse ("/includes/decorators/footer.vm")
Installation
- Download Velocity 1.3.1 or
higher and copy it into
[web-app]/WEB-INF/lib. The SiteMesh distribution comes with velocity-dep-1.3.1.jar. - Download VelocityTools 1.1
and copy it into
[web-app]/WEB-INF/lib. The SiteMesh distribution comes with velocity-tools-view-1.1.jar. - Download Commons Collections 2.1 or
higher and copy it into
[web-app]/WEB-INF/lib. The SiteMesh distribution comes with commons-collections.jar. - Add the following to
[web-app]/WEB-INF/web.xmlwithin the<web-app>tag:
<servlet>
<servlet-name>sitemesh-velocity</servlet-name>
<servlet-class>com.opensymphony.module.sitemesh.velocity.VelocityDecoratorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
- Modify
decorators.xmlto reference a .vm decorator.
A working example is included with the SiteMesh distribution, under the src/example-webapp directory.
Context
VelocityDecoratorServlet puts some things into the context object that you should be aware of:| $request (from VelocityViewServlet) | The HttpServletRequest object |
| $response (from VelocityViewServlet) | The HttpServletResponse object |
| $session (from VelocityViewServlet) | The HttpSession object |
| $application (from VelocityViewServlet) | The ServletContext object |
| $base | request.getContextPath() |
| $title | Parsed page title (<title>...<title>) |
| $head | Parsed page head |
| $body | Parsed page body |
| $page | SiteMesh's internal Page object |
| Anything else | Search for the attribute by that name in the request, session and application scopes |
