关键词

SiteMesh如何结合Freemarker及velocity使用

SiteMesh是一个开源的Java Web页面布局和装饰框架,它可以帮助我们将一个页面的布局和内容分离开来,以便我们可以轻松更改网页的样式和结构。同时,SiteMesh可以与多个模板引擎一起使用,Freemarker和Velocity是SiteMesh集成中广泛使用的两种模板引擎。

下面我们将介绍SiteMesh如何结合Freemarker及velocity使用。

使用Freemarker

首先我们需要在项目中集成SiteMesh和Freemarker,这里简单介绍如何以Maven为例集成SiteMesh和Freemarker:

<dependency>
    <groupId>com.opensymphony.sitemesh</groupId>
    <artifactId>sitemesh</artifactId>
    <version>3.0-alpha-2</version>
</dependency>

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

然后我们需要在Web.xml中配置SiteMesh过滤器和Freemarker的Servlet:

<filter>
  <filter-name>sitemesh</filter-name>
  <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  <init-param>
    <param-name>configFile</param-name>
    <param-value>/WEB-INF/sitemesh.xml</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>sitemesh</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
  <servlet-name>freemarker</servlet-name>
  <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  <init-param>
    <param-name>TemplatePath</param-name>
    <param-value>/WEB-INF/views/</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>freemarker</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>

接下来我们可以在模板文件中使用SiteMesh的标签,如下所示:

<decorator:body>
  <div class="content">
    <h1>Hello, world!</h1>
  </div>
</decorator:body>

在Freemarker模板文件中,可以使用<@decorator>指令将SiteMesh装饰器应用于模板的主体内容。你可以在Freemarker中使用SiteMesh的标签,如下所示:

<#assign decorator="/WEB-INF/decorators/decorator.html" />
<@decorator>
  <#nested />
</@decorator>

这里的<#assign>指令将装饰器指定为变量并分配给装饰器指令。<@decorator>指令应用给定的装饰器,并在<#nested/>中包含模板主体内容。

使用Velocity

在Maven中集成SiteMesh和Velocity:

<dependency>
    <groupId>com.opensymphony.sitemesh</groupId>
    <artifactId>sitemesh</artifactId>
    <version>3.0-alpha-2</version>
</dependency>

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

在web.xml中配置SiteMesh和Velocity:

<filter>
  <filter-name>sitemesh</filter-name>
  <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  <init-param>
    <param-name>configFile</param-name>
    <param-value>/WEB-INF/sitemesh.xml</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>sitemesh</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
  <servlet-name>velocity</servlet-name>
  <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>velocity</servlet-name>
  <url-pattern>*.vm</url-pattern>
</servlet-mapping>

在Velocity模板文件中,我们可以使用SiteMesh的标签嵌套在具体的模板中,如下所示:

#set ($decorator = "/WEB-INF/decorator/decorator.vm")
#decorator($decorator)
    <div class="content">
      <h1>Hello, world!</h1>
    </div>
#end

set指令将装饰器指定为变量,并使用#decorator指令应用给定的装饰器。我们可以在#decorator中指定装饰器模板文件的路径,然后在模板主体中包含我们要显示的内容。

以上是SiteMesh如何结合Freemarker及Velocity使用的攻略,通过上述示例可以快速了解SiteMesh集成模板引擎的方法。

本文链接:http://task.lmcjl.com/news/8153.html

展开阅读全文