首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

【SSI开发小结.5】SiteMesh装饰器

2012-07-04 
【SSI开发总结.5】SiteMesh装饰器web-app idWebApp_ID version2.4 xmlnshttp://java.sun.com/xml/n

【SSI开发总结.5】SiteMesh装饰器
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>game_proj</display-name>
<!-- 中文语言支持过滤器 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.popoann.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<!-- Acegi过滤器 -->
<filter-name>acegiFilterChain</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<!-- Acegi过滤器URL映射 -->
<filter-mapping>
<filter-name>acegiFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ActionContextCleanUp过滤器 -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- SiteMesh的核心过滤器 -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Struts核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>htm</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 应用程序启动时,加载SpringIoC容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/beans-*.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

</web-app>

?

注意过滤器的顺序,ActionContextCleanUp过滤器 -> SiteMesh的核心过滤器 -> Struts核心过滤器

2.配置SITEMESH.XML

/******* /WEB-INF/sitemesh.xml******/

<sitemesh>

<!-- 指定页面装饰器配置文件地址 -->
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>

<!-- 指定页面装饰器配置文件中例外定义地址 -->
<excludes file="${decorators-file}"/>

<page-parsers>
<parser default="true"
/>
<parser content-type="text/html"
/>
<parser content-type="text/html;charset=gb2312"
/>
</page-parsers>
<!--
<page-parsers>
<parser content-type="text/html" />
</page-parsers>
-->
<decorator-mappers>

<mapper value="meta.decorator" />
<param name="property.2" value="decorator" />
</mapper>

<mapper value="ie" />
<param name="match.Mozilla [" value="ns" />
<param name="match.Opera" value="opera" />
<param name="match.Lynx" value="lynx" />
</mapper>

<mapper value="printable" />
<param name="parameter.name" value="printable" />
<param name="parameter.value" value="true" />
</mapper>

<mapper value="robot" />
</mapper>

<mapper value="decorator" />
<param name="parameter.name" value="confirm" />
<param name="parameter.value" value="true" />
</mapper>

<mapper value="${decorators-file}" />
</mapper>

</decorator-mappers>

</sitemesh>

?

本配置文件直接拷贝自下载的sitemesh开发包,基本上只需要修改

<property name="decorators-file" value="/WEB-INF/decorators.xml"/>

这个标签,用来指定对页面进行装配的配置文件路径

3.配置DECORATORS.XML

/******* /WEB-INF/decorators.xml******/

<?xml version="1.0" encoding="ISO-8859-1"?>

<decorators defaultdir="/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->

<excludes>
<pattern>/about.htm</pattern>
</excludes>

<decorator name="main1" page="headAndFoot1.jsp">
<pattern>/index.htm</pattern>
</decorator>

<decorator name="main2" page="headAndFoot2.jsp">
<pattern>/myspace/*</pattern>
</decorator>
</decorators>

?

decorators标签的 defaultdir属性指定修饰页面相对于应用程序根目录的位置,这里为 "/decorators"

excludes标签:指定哪些页面不被修饰

decorator指定哪些匹配页面被修饰,支持通配符,page属性表示修饰页面,即给页面穿什么样的衣服

4.设计修饰页面

/****** /decorators/headAndFoot1.jsp ******/

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title><decorator:title default="kangxm test" /></title>
<decorator:head/>
</head>

<body>
<decorator:body/>
</body>
</html>

?

红色标示表示需要配置的标签:

<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>

确保本页面被纳入SiteMesh体系

<decorator:title default="kangxm test" />

提取被装饰页面的标题,如果没有指定,则使用“kangxm test”

<decorator:head/>

提取被装饰页面head标签中的内容

<decorator:body/>

提取被装饰页面body标签中的内容

/*************************************************************

到此,SiteMesh配置结束,总得来说,配置比较容易,使页面控制更灵活,同时,也避免了重复性代码的出现。

【注意】:要使sitemesh能与struts2集成,还必须下载struts2的sitemesh插件

热点排行