如何在spring-webmvc中使用VelocityLayoutViewResolver和velocity

时间:2015-12-17 07:42:41

标签: spring-mvc velocity

    <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
    <property name="prefix" value="" />
    <property name="suffix" value=".vm"></property>
    <property name="contentType" value="text/html;charset=UTF-8" />
    <property name="layoutUrl" value="layout/default.vm" />
</bean>

关键字“layoutUrl”如何在VelocityLayoutViewResolver中工作?

1 个答案:

答案 0 :(得分:2)

将动态网页划分为布局部分和内容部分非常常见。布局部分可能包含页眉,页脚,侧边栏,导航等。元素意味着在每个响应中看起来或多或少相同,即。但内容部分有所不同,因为行动在哪里,对吧?

布局和内容应该在不同的.vm文件中分开,这样布局必须只设计(和更改)一次,而内容部分不必重复任何内容。

问题是如何将这两个部分放在每个响应上。一种方法是在每个内容文件中解析布局文件。但由于布局通常包含内容,因此每个内容文件很可能会导致多个已解析的布局文件。

更好的方法是将其反转并将内容合并到布局中。这样更容易处理。您所要做的就是声明一个.vm文件作为一般布局文件。在这个文件中,你放了一个名为$screen_content的var,并且奇怪的是你在某个请求中在你的控制器中返回的视图被混合在那个位置。

您的layoutUrl属性告诉布局文件的路径和文件名相对于您在此bean中声明的resourceLoaderPath

<bean
    id="velocityConfig"
    class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <beans:property name="resourceLoaderPath" value="/WEB-INF/templates/" />
</bean>

按照你的例子......

<bean 
    id="viewResolver"
    class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
    ...
    <property name="layoutUrl" value="layout/default.vm" />
</bean>

...您的布局文件必须为/WEB-INF/templates/layout/default.vm