前一段时间需要用到Sitemesh做网页的布局,于是查找资料学习了一下,查到的都是入门学习一类简单的静态页面整合,而且几乎都一样。但还好在某个角落里找到了一点有用的东西,是对于sitemesh标签的介绍,不过...我忘记地址了- -#
先说下我的需求:一个页面分为上下两部分,一个通顶,和下面的查询列表显示,通顶和列表显示都是动态的。
补述:之前用的是frame框架,但是样式上很不协调,下半部会出现滚动条,于是选择采用sitemesh;查找到的资料都是为页面添加静态修饰,而没有一个添加动态修饰的例子。
准备工作:
1、先下载sitemesh。地址:http://www.opensymphony.com/sitemesh/download.action
目前最新的版本是2.4.1
2、将sitemesh-2.4.1.jar拷贝到WEB-INF/lib下
3、在web.xml中配置SiteMeshFilter:
<filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>*</url-pattern> </filter-mapping>
4、建立装饰器页面在/decorators文件夹下 #:这里我建立了两个装饰器页面,一个作为主装饰器,一个作为通顶的装饰器。
panel.jsp //动态通顶的装饰器
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %> <!--动态通顶只需要显示它的内容就可以,所以只取它的body内容部分--> <decorator:body />
main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %> <%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="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> <!-- 取被装饰页面的head及title内容--> <decorator:head /> <title><decorator:title default="配置默认的title"/></title> </head> <body> <!--body部分,取被panel.jsp装饰的页面,及被main.jsp装饰的页面的body内容--> <page:applyDecorator page="getfields.do" name="panel"/> <!-- page属性代表修饰的路径,这里可以是一个.do,实现动态内容的页面整合,name属性设置为装饰器的名字--> <decorator:body /> </body> </html>
5、建立WEB-INF/decorators.xml描述装饰页面:
<?xml version="1.0" encoding="gb2312"?> <!-- 配置装饰器所在路径 --> <decorators defaultdir="/decorators"> <!-- 主装饰器 --> <decorator name="main" page="main.jsp"/> <!-- 动态通顶装饰器 --> <decorator name="panel" page="panel.jsp"/> </decorators>
在一般情况下,如果你的所有页面都需要被装饰,那么可以写成
<decorators defaultdir="/decorators"> <decorator name="main" page="main.jsp"> <pattern>*</pattern> <!-- pattern配置需要被装饰的页面路径--> </decorator> </decorators>
而我只需要部分页面被修饰,如果没有配pattern,sitemesh在过滤页面的时候貌似会检查页面的某个属性:即
<!-- 作用是使该页面被main装饰器装饰--> <meta name="decorator" content="main"/>
如果存在,则根据content属性的值,为该页面匹配装饰器。所以只要在需要被装饰的页面的head中添加
<meta name="decorator" content="main"/>
就可以自动被装饰了,个人认为还是这种方法比较方便灵活。
由于被装饰的是一个.do的动态路径,没法给出例子,不过已成功用在项目中。
有问题欢迎留言讨论,转载请注明----