Ben,
Use the VelocityLayoutServlet in your web.xml.
Actually, if it were only Velocity than that would be the solution. But
since you have
Spring here is the setup:
/WEB-INF/applicationContext.xml
----------------------------------------------------------------------------------------------------------
<beans>
<bean id="velocityConfigurer"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/"/>
<property name="configLocation"
value="/WEB-INF/velocity.properties"/>
</bean>
</beans>
----------------------------------------------------------------------------------------------------------
/WEB-INF/abc-servlet.xml
----------------------------------------------------------------------------------------------------------
<beans>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.velocity.VelocityLayoutView"/>
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".vm"/>
<property name="exposeRequestAttributes" value="true"/>
<property name="exposeSessionAttributes" value="true"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="layoutUrl" value="/layout/default_layout.vm"/>
<property name="toolboxConfigLocation"
value="/WEB-INF/toolbox.xml"/>
</bean>
</beans>
----------------------------------------------------------------------------------------------------------
/WEB-INF/velocity.properties (include this anywhere)
----------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------
# LAYOUT SERVLET MANAGEMENT
#----------------------------------------------------------------------------
# Allows for screens to be used for layout
#----------------------------------------------------------------------------
# Filepath for error template, relative to web application root directory
tools.view.servlet.error.template = /layout/layout_error.vm
# Directory for layout templates, relative to web application root directory
tools.view.servlet.layout.directory = /layout/
# Filepath of the default layout template
# relative to the layout directory
# NOT relative to the root directory of the webapp!
tools.view.servlet.layout.default.template = default_layout.vm
----------------------------------------------------------------------------------------------------------
/layout/default_layout.vm
----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
#parse( "/includes/header.vm" )
<body>
#parse( "/includes/navigation.vm" )
$!{screen_content}
#parse( "/includes/footer.vm" )
</body>
</html>
----------------------------------------------------------------------------------------------------------
The default_layout.vm is a wrapper file.
The call goes like so:
- home.htm -> HomeController
- HomeController -> return new ModelAndView( "/home.vm" )
- /home.vm -> set any variables
- VelocityLayoutViewResolver -> wrap home.vm with default_layout.vm
- show page
Hopefully this was all the information you needed to get going. I've
been using this setup for years.
Charlie
On 03/12/2010 10:12 AM, Ben Short wrote:
> Hi Malcom,
>
> Yes I have thought about that pattern.
>
> I'm using spring mvc so that way of doing it wont work for me. What I don't
> want to have to do is
>
> #parse('header.vm')
> <div>
> <h1>Standard Page</h1>
> </div>
> #parse('footer.vm')
>
> As cutting a designed page up can be tricky.
>
> Ben
>
> On 12 March 2010 11:16, Malcolm Edgar <[email protected]> wrote:
>
>
>> In Apache Click we use a similar pattern using Velocity.
>>
>>
>> http://click.apache.org/docs/user-guide/htmlsingle/click-book.html#page-templating
>>
>> regards Malcolm Edgar
>>
>> On Fri, Mar 12, 2010 at 10:06 PM, Ben Short <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> With free marker I can do the following:
>>>
>>> layout.ftl
>>>
>>> <#macro layout>
>>> <html>
>>> <head>
>>> <title>Freemarker Test</title>
>>> </head>
>>> <body>
>>> <h1></h1>
>>> <#nested/>
>>> </body>
>>> </html>
>>> </#macro>
>>>
>>> page.ftl
>>>
>>> <#import "layout.ftl" as layout>
>>> <@layout.layout>
>>> <div>
>>> <h1>Standard Page</h1>
>>> </div>
>>> </@layout.layout>
>>>
>>> Is it possible todo the same with velocity?
>>>
>>> Regards
>>>
>>> Ben
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]