OpenSymphony——SiteMesh——Decorators(2)

来源:互联网 发布:电影解析采集源码 编辑:程序博客网 时间:2024/05/22 04:41

五、如何使用SiteMesh
以struts2+spring2+hibernate3构架的系统为例
1、下载SiteMesh下载地址:http://www.opensymphony.com/sitemesh/download.action
2、在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar;
3、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:    

OpenSymphony——SiteMesh——Decorators(2)<!-- sitemesh配置 -->
OpenSymphony——SiteMesh——Decorators(2)    
<filter>
OpenSymphony——SiteMesh——Decorators(2)        
<filter-name>sitemesh</filter-name>
OpenSymphony——SiteMesh——Decorators(2)        
<filter-class>
OpenSymphony——SiteMesh——Decorators(2)            com.opensymphony.module.sitemesh.filter.PageFilter
OpenSymphony——SiteMesh——Decorators(2)        
</filter-class>
OpenSymphony——SiteMesh——Decorators(2)    
</filter>
OpenSymphony——SiteMesh——Decorators(2)    
<filter-mapping>
OpenSymphony——SiteMesh——Decorators(2)        
<filter-name>sitemesh</filter-name>
OpenSymphony——SiteMesh——Decorators(2)        
<url-pattern>/*</url-pattern>
OpenSymphony——SiteMesh——Decorators(2)    
</filter-mapping>

 注意过滤器的位置:应该在struts2的org.apache.struts2.dispatcher.FilterDispatcher过滤器之前,org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后,否则会有问题;

4、在下载的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目录下就有),
将其拷贝到/WEB-INF目录下;

5、在sitemesh.xml文件中有一个property结点(如下),该结点指定decorators.xml在工程中的位置,让sitemesh.xml能找到它;按照此路径新建decorators.xml文件,当然这个路径你可以任意改变,只要property结点的value值与其匹配就行;


OpenSymphony——SiteMesh——Decorators(2)<property name="decorators-file" value="/WEB-INF/decorators.xml"/>

    
6、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板,如下示例:我的模板:main.jsp

      具体代码见OpenSymphony——SiteMesh——Decorators(3)
这就是个简单的模板,页面的头和脚都由模板里的静态HTML决定了,主页面区域用的是<decorator:body />标签;
也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚,然后页面自身的内容将自动放到<decorator:body />标签所在位置;

<decorator:title default="Welcome to test sitemesh!" />:读取被装饰页面的标题,并给出了默认标题。
<decorator:head />:读取被装饰页面的<head>中的内容;
<decorator:body />:读取被装饰页面的<body>中的内容;

7、如果某个特殊的需求请求路径在过滤器的范围内,但又不想使用模板,SiteMesh也可以很好的解决这个问题。用第5步说到的decorators.xml进行配置。        
下面是我的decorators.xml:

OpenSymphony——SiteMesh——Decorators(2)<?xml version="1.0" encoding="ISO-8859-1"?>
OpenSymphony——SiteMesh——Decorators(2)
<decorators defaultdir="/decorators">
OpenSymphony——SiteMesh——Decorators(2)    
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
OpenSymphony——SiteMesh——Decorators(2)    
<excludes>
OpenSymphony——SiteMesh——Decorators(2)        
<pattern>/index.jsp*</pattern>
          <pattern>/login/*</pattern>

OpenSymphony——SiteMesh——Decorators(2)    
</excludes>
OpenSymphony——SiteMesh——Decorators(2)    
<decorator name="main" page="main.jsp">  <!-- 指明了一个名为main的装饰器 -->
OpenSymphony——SiteMesh——Decorators(2)        
<pattern>/*</pattern>
OpenSymphony——SiteMesh——Decorators(2)    
</decorator>
OpenSymphony——SiteMesh——Decorators(2)
</decorators>


decorators.xml有两个主要的结点:(main装饰器默认情况下装饰web应用根路径下的所有页面)

  1. decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板
  2. excludes结点则指定了哪些路径的请求不使用任何模板

   如上面代码,/index.jsp和凡是以/login/开头的请求路径一律不使用模板;


另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录;

六、使用SiteMesh总结

  1. 使用SiteMesh带来的不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务逻辑,而不是整个页面的风格和结构。
  2. 它让我们摆脱了大量用include方式复用页面尴尬局面;
  3. 也避免了tiles框架在团队开发中的复杂度;
  4. 它还提供了很大的灵活性以及给我们提供了整合异构Web系统页面的一种方案。

 

0 0
原创粉丝点击