SiteMesh装饰器使用总结
SiteMesh是一个Java WEB项目的网页布局和修饰框架。使用SiteMesh后就不再需要在每个页面中都用<jsp:include>标签引入页头、页尾、导航等其他公用页面了。
- 可以将网页的内容和页面结构分离,达到页面结构共享的目的。
- 页面装饰效果耦合在目标页面中,无需使用include指令显示包含装饰效果,目标页面和装饰页面完全分离。
- 整个web应用可以使用相同的装饰页面,风格统一,整体效果更好。
- SiteMesh通过Filter拦截请求和响应,给原始页面加入装饰,再把装饰后的结果返回给客户端。
- 根据页面URL查找合适的装饰模板页
- 提取被访问页的内容,放置到装饰模板中的适当位置。
用法
1.加入siteMesh Jar包
2.在web.xml中配置siteMesh Filter
WEB-INF/web.xml文件
<web-app ......>
......
<filter>
<filter-name>sitemeshFilter</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemeshFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.创建装饰器配置文件
指定装饰模板与URL的对应关系,也可以配置那些URL不需要模板控制。
WEB-INF/decorators.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
<excludes>
<pattern>/Login*</pattern>
<patterm>/index.jsp*<pattern>
</excludes>
<decorators defaultdir="/WEB-INF/views"> <!--defaultdir属性为模板文件的存放路径-->
<!-- 默认装饰模板配置, 在需要装饰的页面增加<meta name="decorator" content="default"/> -->
<decorator name="main" page="layouts/main.jsp" >
<pattern>/api/certs/*</pattern>
<pattern>/api/provs/*</pattern>
<pattern>/api/macs/*</pattern>
</decorator>
<decorator name="panel" page="layouts/panle.jsp">
</decorator>
<!-- 下面可以写多个 -->
</decorators>
decorator标签属性
- page 装饰模板文件
- name 装饰模板别名
- role 角色
- webapp 单独指定装饰文件存放目录
使用SiteMesh最主要的工作就是创建装饰模板,然后在decorators.xml配置装饰模板应用于哪些页面URL。一般项目可以抽象出主模板,二级页面模板,三级页面模板,弹出窗口模板等,但数量往往不会超过8个。
4.创建装饰模板
WEB-INF/views/layouts/main.jsp
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<html>
<head>
<title> <decorator:title default="default title"/> </title>
<decorator:head/>
</head>
<body <decorator:getProperty property=“body.onload" writeEntireProperty=“1"/> >
<jsp:include page="/header.jsp"></jsp:include>
......
<decorator:body/>
......
从meta中获取变量company的名称:
<decorator:getProperty property=“meta.company”/>
......
<decorator:usePage id=“myPage" />
<%=myPage.getRequest().getAttribute(“username”)%>
......
<jsp:include page="/footer.jsp"></jsp:include>
</body>
</html>
Sitemesh标签
<decorator:head />
填充被装饰页面的head标签内容
<decorator:body />
填充被装饰页面的body标签内容
<decorator:title default="default title" />
填充被装饰页面的title标签内容,
<decorator:getProperty property="" default="" writeEntireProperty="{true|false|1|0}"/>
读取被装饰页面中的相关标签的属性值,writeEntrieProperty表示只显示"value",还是显示"prop=value"
<decorator:usePage id="" />
<%=myPage.getRequest().getAttribute(“username”)%>
将被装饰页面构造为一个对象,可以在装饰页面的JSP中直接引用。
5.被装饰页面
<html lang=“en”>
<head>
<title>我的sitemesh</title>
<meta name="decorator" content="default"/>
<meta name=“company” content=“smartdot”/>
<meta name=“Author” content=“zhangsan”/>
<script>
function count(){return 10;}
</script>
</head>
<body onload=“count()”>
<p>这是一个被修饰页面</p>
</body>
</html>
主动应用装饰器
在装饰模板中和被包装页面中都可以主动应用装饰器。使用的标签为applyDecorator或apply-decorator,可以内嵌param标签提供参数,装饰模板中用getProperty标签可以读取param提供的参数值。
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>
......
<body>
<page:applyDecorator page="/common/top.jsp" name="panel">
<page:param name="paramName">
......
</page:param>
</page:applyDecorator>
......
</body>
panel装饰模板中配置:
<div class="....">
<decorator:body/> top.jsp的body
<decorator:getProperty property="paramName"/>
</div>
applyDecorator属性
- name 要使用的装饰模板名,decorators.xml中配置的
- page 要装饰的页面
原理
http://my.oschina.net/georgele/blog/49137?p=1
http://my.oschina.net/s2jh/blog/361044
SiteMesh使用拦截器拦截所有请求。
参考文档
http://m.blog.csdn.net/blog/kpchen_0508/41281749
http://blog.csdn.net/jzh440/article/details/7770013
SiteMesh装饰器使用总结的更多相关文章
- 关于Springmvc中include与Sitemesh装饰器的基本使用
关于Springmvc中include与Sitemesh装饰器的使用 !!!转载请注明出处=>http://www.cnblogs.com/funnyzpc/p/7283443.html 静态包 ...
- 使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)
摘要:首先这个Decorator解释一下这个单词:“装饰器”,我觉得其实可以这样理解,他就像我们用到的Frame,他把每个页面共有的东西提炼了出来,也可能我们也会用各种各样的include标签,将我们 ...
- sitemesh 2.4 装饰器学习
SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的 SiteMesh是OpenSymphony团队开发的JEE框架之一,它是一个非常优秀的页面 ...
- freemarker 集成 sitemesh 装饰html页面 shiro 标签
guest标签:验证当前用户是否为"访客",即未认证(包含未记住)的用户: shiro标签:<shiro:guest></shiro:guest> : ...
- [转]decorator(HTML装饰器)
原文地址:https://blog.csdn.net/jzh440/article/details/7770013 1>:每当遇到一个新的技术,首先我会问自己,这个技术是做神马的?用这个技术有神 ...
- Python高手之路【四】python函数装饰器
def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...
- python装饰器
今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- [原创]django+ldap实现单点登录(装饰器和缓存)
前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...
随机推荐
- 使用apktool工具遇到could not decode arsc file的解决办法
问题详情: 当前环境为 win7 64位 jdk1.7 apktool.jar(版本1.5.2) apktool(版本windows-r05-ibot) 使用的反编译工具和apk文件为 反编译 ...
- July 29th, Week 31st Friday, 2016
I am a slow walker, but I never walk backwards. 我走得很慢,但我从来不会后退. I had run very fast, and I had once ...
- gitlab安装
[root@localhost ~]# wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rp ...
- 编辑并列DIV
html编辑控件,编写3个div并行,先看一下效果,如下图: 我需要将整个白色部分作为一个整体,编辑控件使用,其实使用到的就是div中的float:left属性,并且定义好宽度.css 部分代码如下: ...
- [译]SQL Server 之 索引基础
SQL Server中,索引以B-tree的结构组织数据.B-tree代表平衡树,但是SQL Server使用一种叫做B+的树. B+树不是总是保持严格的平衡的树. 首先,索引有两个主要的部件:一个页 ...
- PHP多文件上传类
<?php class Upload{ var $saveName;// 保存名 var $savePath;// 保存路径 var $fileFormat = array('gif','jpg ...
- Aqua Data Studio中文乱码
使用Aqua Data Studio 查询数据时,如果表中的数据有中文时,会显示乱码,如下图: 解决方法很简单,只能更改字体即可,步骤如下: 更改字体后,显示的结果如下:
- LightOJ1051 Good or Bad(DP)
这题感觉做法应该挺多吧,数据规模那么小. 我用DP乱搞了.. dp0[i][j]表示字符串前i位能否组成末尾有连续j个元音字母 dp1[i][j]表示字符串前i位能否组成末尾有连续j个辅音字母 我的转 ...
- BZOJ4013 : [HNOI2015]实验比较
首先用并查集将等号缩点,然后拓扑排序判断有没有环,有环则无解,否则通过增加超级源点$0$,可以得到一棵树. 设$f[x][y]$表示$x$子树里有$y$种不同的数字的方案数,由底向上DP. 对于当前点 ...
- BZOJ3165 : [Heoi2013]Segment
建立线段树,每个节点维护该区间内的最优线段. 插入线段时,在线段树上分裂成$O(\log n)$棵子树,若与当前点的最优线段不相交,那么取较优的,否则暴力递归子树. 查询时在叶子到根路径上所有点的最优 ...