Struts2 使用SiteMesh做网页布局

简单来讲SiteMesh就是用来做网页母版 Layout分层的。

 

SiteMesh官方网站给出的最新版本是SiteMesh Version 2.4.1,但是下载不下来!!下载页面NOT FOUND!很囧有木有!无奈只能在findjar.com下载2.4.1的jar包。 或者使用Struts2的sitemesh包2.4.2,这个包是插件struts2-sitemesh-plugin-2.2.1.1.jar所依赖的。

安装使用过程记录:

1.把包扔到WEB-INF/lib下面。

2.修改web.xml文档:

    之前:注意filter-class是StrutsPrepareAndExecuteFilter

[html]  view plain copy
  1. <filter>  
  2.     <filter-name>struts2</filter-name>  
  3.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>struts2</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  
之后:
[html]  view plain copy
  1. <filter>  
  2.     <filter-name>struts-prepare</filter-name>  
  3.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>  
  4. </filter>  
  5. <filter>  
  6.     <filter-name>struts-execute</filter-name>  
  7.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>  
  8. </filter>  
  9. <filter>  
  10.         <filter-name>sitemesh</filter-name>  
  11.     <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>  
  12. </filter>  
  13. <!--sitemesh in the middle and after struts-prepare -->  
  14. <filter-mapping>  
  15.     <filter-name>struts-prepare</filter-name>  
  16.     <url-pattern>/*</url-pattern>  
  17. </filter-mapping>  
  18. <filter-mapping>  
  19.     <filter-name>sitemesh</filter-name>  
  20.     <url-pattern>/*</url-pattern>  
  21. </filter-mapping>  
  22. <filter-mapping>  
  23.     <filter-name>struts-execute</filter-name>  
  24.     <url-pattern>/*</url-pattern>  
  25. </filter-mapping>  

注释下面的代码顺序很重要sitemesh的过滤器要在prepare和execute之间。

3. 在WEB-INF下添加decorators.xml文档:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!-- defaultdir指定装饰器文件所在的路径 -->  
  3. <decorators defaultdir="/layout">  
  4.     <!--excludes结点则指定了哪些路径的请求不使用任何模板 -->  
  5.     <excludes>  
  6.         <pattern>/entpLogin.jsp</pattern>  
  7.         <pattern>/entpRegister.jsp*</pattern>  
  8.         <pattern>/messageDiv*</pattern>  
  9.         <pattern>/registerServiceDetail*</pattern>  
  10.     </excludes>  
  11.     <!--decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板 -->  
  12.     <decorator name="main" page="mode.jsp">  
  13.         <pattern>/*</pattern>  
  14.     </decorator>  
  15. </decorators  

decorator标签的page指定的是装饰母版页。至于<pattern>/messageDiv*</pattern><pattern>/registerServiceDetail*</pattern> 是我在页面中使用Struts Ajax主题是指定的action(用来局部刷新的),这样sitemesh就不对这些ajax返回的response进行装饰

4.编写母版mode.jsp

[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator"  
  4.     prefix="decorator"%>  
  5. <%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>  
  6. <%@ taglib prefix="s" uri="/struts-tags"%>  
  7. <%@ taglib prefix="sx" uri="/struts-dojo-tags"%>  
  8. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  9. <html>  
  10. <head>  
  11. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  12. <link rel="stylesheet" type="text/css" href="css/style.css"  
  13.     media="screen">  
  14. <title>  
  15.    <decorator:title default="Welcome" /> <!--被装饰页面的Title-->  
  16. </title>  
  17. <sx:head />  
  18.    <decorator:head /><!--被装饰页面的head-->  
  19. </head>  
  20. <body>  
  21.    <decorator:body /><!--被装饰页面的body-->  
  22. </body>  
  23. </html>  

Ok啦 这样除了在decorator.xml中exclude的请求之外,所有的请求页面都会被装饰了,可以在<decorator:body /> 之前增加header,导航条,之后增加footer之类的东西啦!

注意:如果在页面中增加了ajax主题的标签(局部刷新),则一定要在exclude pattern中添加请求的action名,否则局部刷新得到的innerHtml也会被添加上header导航条footer等装饰元素


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值