decorator(HTML装饰器)
来源:互联网 发布:金山软件恢复 编辑:程序博客网 时间:2024/06/15 02:28
1>:每当遇到一个新的技术,首先我会问自己,这个技术是做神马的?用这个技术有神马好处?相比其它方式他的优势在哪里?我该怎样实现这个技术?
首先这个Decorator解释一下这个单词:“装饰器”,我觉得其实可以这样理解,他就像我们用到的Frame,他把每个页面都有的东东提炼了出来,也可能我们也会用各种各样的include标签,将我们的常用页面给包括进来:比如说页面的top,bottom这些每个页面几乎都有,而且都一样,如果我们在每个页面都include,可以发现我们的程序是多吗的冗余,重复。相比之下装饰器给我们提供了一个较好的选择,他在你要显示的页面根本看不出任何include信息,可以说完全解耦。
2>:decorator的原理:
sitemesh应用Decorator模式,用filter截取request和response,把页面组件head,content,banner、bottom结合为一个完整的视图。通常我们都是用include标签在每个jsp页面中来不断的包含各种header, stylesheet, scripts and footer.
3>:decorator的实现
首先我们http://www.opensymphony.com/sitemesh/下载我们需要的jar包:sitemesh-2.4.jar
在我们的web.xml中配置如下信息:
<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>
在WEB-INF目录下新建一个decorators.xml文件(/decorator是你的包装jsp根路径在这里main.jsp和panel.jsp都是包装jsp,a.jsp,b,jsp是被包装jsp)
<?xml version="1.0" encoding="utf-8" ?> <decorators defaultdir="/decorator"><decorator name="main" page="main.jsp"> <pattern>/page/a.jsp</pattern> <pattern>/page/b.jsp</pattern> </decorator> <decorator name="panel" page="panel.jsp"></decorator> </decorators>
建立我们的包装jsp在WEBROOT->decorator下面:这里有两个分别是main.jsp和panel.jsp
panel.jsp
<decorator:head />
插入原始页面(被包装页面)的head标签中的内容(不包括head标签本身)。
<decorator:body />
插入原始页面(被包装页面)的body标签中的内容。
<decorator:title [ default="..." ] />
插入原始页面(被包装页面)的title标签中的内容,还可以添加一个缺省值。
下面介绍一下<page:applyDecorator name=" " page=" ">
其实这里是一样的name指的是我们要用的包装器名字也就是在decorator.xml中定义好的,page指的是被包装页面。
还有就是<decorator:getProperty property="" [default=""][writeEntireProperty=""]/>
插入原始页面的property属性指定的值同名的属性。
property:指定那个属性将要被插入
default:如果没有发现指定的属性,则插入此值
writeEntireProperty:表示是否将(空格 属性名=“属性值”)整个插入,允许时的值是true或yes或1
例如下面例子中的:当你访问a.jsp时,焦点会定在text上。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title> <decorator:title default="默认包装器。。。"/> </title> <decorator:head/> </head> <body> <hr width="100" color="red"/> <decorator:body/> <hr width="100" color="blue"/> </body></html>
main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%><%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <title><decorator:title default="装饰器页面..." /></title> <decorator:head /> </head> <body bgcolor="gray"<decorator:getProperty property="body.onload" writeEntireProperty="true" />> <page:applyDecorator page="/common/top.jsp" name="panel"/> <div align="center"> <p><font color="red">this is style's header</font></p> <decorator:body/> <p><font color="red">this is style's footer</font></p> </div> <page:applyDecorator page="/common/bottom.jsp" name="panel"/> </body> </html>
a.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head><title>My JSP 'a.jsp' starting page</title> </head> <body onload="document.someform.a.focus();"><form name="someform"> <font color="red">this is my JSP page. </font><br> <input type="text" id="a"/></form> </body></html>
文件都写好之后我们就访问了:效果如下:
如果感觉不够详尽请看这里:http://hi.baidu.com/%C9%AE_%CC%C6/blog/item/b5731091b4591493a977a488.html
- decorator(HTML装饰器)
- decorator(HTML装饰器)
- SiteMesh--decorator(HTML装饰器)
- 装饰器(Decorator)
- 装饰器(Decorator)
- Decorator(装饰器模式)
- 装饰器模式(Decorator)
- Python 装饰器( Decorator)
- 装饰器模式(Decorator )
- Decorator(装饰器)模式
- 装饰器模式(Decorator)
- 装饰器模式(Decorator)
- 装饰器模式(Decorator)
- 装饰器模式(Decorator)
- python装饰器(decorator)
- Python中的Decorator(装饰器)模式
- JAVA设计模式:装饰器(Decorator)
- Python和Decorator(装饰器)模式
- 7本不错的HTML 5书籍推荐
- 汇总最流行iOS游戏或应用营销及推广技巧
- hdu 1728 逃离迷宫 注意标记转弯次数的方法
- JQuery动态添加删除表格
- SPOJ KPSUM 题解
- decorator(HTML装饰器)
- 一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)
- pamie处理popup界面
- 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal, __thiscall)
- Js的script标签中的id作用
- 浅淡SQL中where 1=1和0=1的作用
- MFC ListBox(列表框)的使用
- switch记得要加case啊
- 如何选中MFC中的菜单栏,在选中后打钩