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集成模板引擎的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SiteMesh如何结合Freemarker及velocity使用 - Python技术站