|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。
利用sitemesh创建复合视图-2.粉饰器decorator
利用sitemesh创建复合视图-1.hello
利用sitemesh创建复合视图-2.粉饰器<-now
利用sitemesh创建复合视图-3.别的会商
粉饰器decorator观点创建可复用的web使用程序,一个通用的办法是创建一个分层体系,好像上面一个一般的web使用:前端,front-end:JSP和Servlets,或jakarta的velocity把持层框架Controller:(Struts/Webwork)营业逻辑Business:次要营业逻辑
耐久化框架:hibernate/jdo
可糟的是前真个页面逻辑很难被复用,当你在每个页面顶用数之不尽的include来复用大众的header,stylesheet,scripts,footer时,一个成绩呈现了-反复的代码,每一个页面必需用copy来复用页面布局,而当你必要创意性的改动页面布局时,劫难就爱上了你。
sitemesh经由过程filter截取request和response,并给原始的页面到场必定的粉饰(大概为header,footer...),然后把了局前往给客户端,而且被粉饰的原始页面其实不晓得sitemesh的粉饰,这也就到达了脱耦的目标。
听说行将新出台的Portlet标准会匡助我们尺度的完成比这些更多更cool的设法,但不幸的我还不懂它究竟是一个什末东东,有乐趣的人能够研讨jetspeed,或JSR(JavaSpecificationRequest)168,但我想sitemesh云云复杂,我们无妨先用着。
让我们看看如何设置情况除要copy到WEB-INF/lib中的sitemesh.jar,copy到WEB-INF中的sitemesh-decorator.tld,sitemesh-page.tld文件外,另有2个文件要创建到WEB-INF/:sitemesh.xml(可选)decorators.xmlsitemesh.xml能够设置2种信息:
PageParsers:卖力读取stream的数据到一个Page对象中以被SiteMesh剖析和操纵。(不太经常使用,默许便可)
DecoratorMappers:分歧的粉饰器品种,我发明2种对照有效都列鄙人面。一种通用的mapper,能够指定粉饰器的设置文件名,另外一种可打印的粉饰器,能够同意你当用http://localhost/aaa/a.html?printable=true体例会见时给出原始页面以供打印(以免把header,footer等的花梢的图片也搭上)(但一样平常不必创建它,默许设置充足了:com/opensymphony/module/sitemesh/factory/sitemesh-default.xml):
典范:
<sitemesh><page-parsers><parserdefault="true"class="com.opensymphony.module.sitemesh.parser.DefaultPageParser"/><parsercontent-type="text/html"class="com.opensymphony.module.sitemesh.parser.FastPageParser"/><parsercontent-type="text/html;charset=ISO-8859-1"class="com.opensymphony.module.sitemesh.parser.FastPageParser"/></page-parsers><decorator-mappers><mapperclass="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"><paramname="config"value="/WEB-INF/decorators.xml"/></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper"><paramname="decorator"value="printable"/><paramname="parameter.name"value="printable"/><paramname="parameter.value"value="true"/></mapper></decorator-mappers></sitemesh>
decorators.xml:界说组成复合视图的一切页面构件的形貌(次要布局页面,header,footer...),以下例:
<decoratorsdefaultdir="/_decorators"><decoratorname="main"page="main.jsp"><pattern>*</pattern></decorator><decoratorname="printable"page="printable.jsp"role="customer"webapp="aaa"/></decorators>
defaultdir:包括粉饰器页面的目次page:页面文件名name:别号role:脚色,用于平安webapp:能够别的指定此文件寄存目次Patterns:婚配的路径,能够用*,那些被会见的页面必要被粉饰。
最主要的是写出粉饰器自己(也就是那些要复用页面,和布局页面)。实在,主要的事情就是制造粉饰器页面自己(也就是包括布局和划定规矩的页面),然后把他们形貌到decorators.xml中。
让我们来先看一看最复杂的用法:实在最经常使用也最复杂的用法就是我们的hello例子,面临云云浩瀚的手艺,我想只需到达功效点到为止便可,没需要往研讨太深(除非您有更深的需求)。
<%@pagecontentType="text/html;charset=GBK"%><%@tagliburi="sitemesh-decorator"prefix="decorator"%><html><head><title><decorator:titledefault="粉饰器页面..."/></title><decorator:head/></head><body>sitemesh的例子<hr><decorator:body/><hr>chen56@msn.com</body></html>
我们在粉饰器页面只用了2个标签:
<decorator:titledefault="粉饰器页面..."/>:把哀求的原始页面的title内容拔出到<title></title>两头。
<decorator:body/>:把哀求的原始页面的body内的全体内容拔出到响应地位。
然后我们在decorator.xml中到场以下形貌便可:
<decoratorname="main"page="main.jsp"><pattern>*</pattern></decorator>
如许,哀求的一切页面城市被从头处置,并依照main.jsp的格局从头展示在你眼前。
让我们看看更多的用法。(剽窃sitemesh文档)以以下着全体标签:DecoratorTagsPageTags被用于创建粉饰器页面.被用于从原始内容页面会见粉饰器.<decorator:head/><decorator:body/><decorator:title/><decorator:getProperty/><decorator:usePage/><page:applyDecorator/><page:param
<decorator:head/>
拔出原始页面(被包装页面)的head标签中的内容(不包含head标签自己)。
<decorator:body/>
拔出原始页面(被包装页面)的body标签中的内容。
<decorator:title[default="..."]/>
拔出原始页面(被包装页面)的title标签中的内容,还能够增加一个缺省值。
例:
/_decorator/main.jsp中(粉饰器页面):<title><decorator:titledefault="却省title-hello"/>-附加题目</title>
/aaa.jsp中(原始页面):<title>aaa页面</title>
会见/aaa.jsp的了局:<title>aaa页面-附加题目</title>
<decorator:getPropertyproperty="..."[default="..."][writeEntireProperty="..."]/>
在标签处拔出原始页面(被包装页面)的原本的标签的属性中的内容,还能够增加一个缺省值。
sitemesh文档中的例子很好了解:Thedecorator:<bodybgcolor="white"<decorator:getPropertyproperty="body.onload"writeEntireProperty="true"/>>Theundecoratedpage:<bodyonload="document.someform.somefield.focus();">Thedecoratedpage:<bodybgcolor="white"onload="document.someform.somefield.focus();">
注重,writeEntireProperty="true"会在拔出内容前到场一个空格。
<decorator:usePageid="..."/>象jsp页面中的<jsp:useBean>标签一样,可使用被包装为一个Page对象的页面。(懒的用)
例:可用<decorator:usePageid="page"/>:<%=page.getTitle()%>到达<decorator:title/>的会见了局。
<page:applyDecoratorname="..."[page="..."title="..."]><page:paramname="...">...</page:param><page:paramname="...">...</page:param></page:applyDecorator>
使用包装器到指定的页面上,一样平常用于被包装页面中自动使用包装器。这个标签有点欠好了解,我们来看一个例子:
包装器页面/_decorators/panel.jsp:<p><decorator:title/></p>...<p><decorator:body/></p>而且在decorators.xml中有<decoratorname="panel"page="panel.jsp"/>一个大众页面,行将被panel包装:/_public/date.jsp:...<%=newjava.util.Date()%>...<decorator:getPropertyproperty="myEmail"/>被包装页面/page.jsp:<title>page的使用</title>.....<page:applyDecoratorname="panel"page="/_public/date.jsp"><page:paramname="myEmail">chen_p@neusoft.com</page:param></page:applyDecorator>
最初会是什末了局呢?除/page.jsp会被默许的包装页面包装上header,footer外,page.jsp页面中还内嵌了date.jsp页面,而且此date.jsp页面还会被panel.jsp包装为一个title加body的有2段的页面,第1段是date.jsp的title,第2段是date.jsp的body内容。
别的,page:applyDecorator中包括的page:param标签所声明的属性值还能够在包装页面顶用decorator:getProperty标签会见到。
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大. |
|