apache tiles的点滴
- tiles官方网站:http://tiles.apache.org/framework/index.html
- strust2 plugin插件与tiles整合: http://struts.apache.org/2.x/docs/tiles-plugin.html
- 不需要在web.xml中定义<context-param>节点来配置tiles配置文件的方式 http://tiles.apache.org/framework/tutorial/wildcard-configuration.html
在编辑tiles config文件的时候,可以将框架页面的关系设置成继承的关系
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <definition name="com.koubei.layout.basic" template="/WEB-INF/layout/profileLayout.jsp"> <put-attribute name="title" value="UC-Profile" /> <put-attribute name="menu" value="com.koubei.Profile.Menu" /> <put-attribute name="body" value="/WEB-INF/kvdb_user_profile.jsp" /> <put-attribute name="titleInfo" value="UC用户信息" /> <put-attribute name="query" value="/WEB-INF/include/userqueryParamSet.jsp" /> </definition> <!-- UserInfo --> <definition name="com.koubei.layout.userInfo" extends="com.koubei.layout.basic"> <put-attribute name="titleInfo" value="UC用户信息" /> <put-attribute name="query" value="/WEB-INF/include/userqueryParamSet.jsp" /> <put-attribute name="body" value="/WEB-INF/kvdb_user_profile.jsp" /> </definition> </tiles-definitions>
在配置文件中配置一个com.koubei.layout.basic框架页面,这个相当于是一个masterpage,可以让其他页面来继承这个masterpage来实现渲染。
但是在页面执行的过程中出现了问题,在执行/WEB-INF/kvdb_user_profile.jsp这个body页面的时候,不能取到在框架页面中定义的titleInfo和query这两个属性。原因很可能是每一个属性空间是相互隔离的,在definition中定义的<put-attribute/>标签中的属性只能在definition的template这个空间中可以被调用。
组合模式VS装饰器模式
■tiles是标准的组合模式实现页面渲染的框架,sitemesh是标准的装饰模式的实现。tiles在应用的过程中,更像在面向对象的软件设计中使用继承的方式来重用页面(将父页面的layout,已经每个layout中的页面片段重用)。
从配置的角度来说,装饰器模式的页面重用方案确实比较方便,他可以定义一个装饰器,将它应用到整个应用程序之上,就能将整个应用程序都渲染了。然而组合模式页面重用方式是需要为每个具体的页面都需要有一个明确的配置信息。
■另外,tiles在runtime时将不同的页面片段重新组合,配置生成一个新的页面,然后sitemesh是因为装饰器和页面是一对一的,在运行期不能动态生成一个装饰器,所以不能像tiles那样在运行期动态组合页面块。
■在性能方面,tiles在运行时的开销比较小,然后sitemesh在运行期需要对被装饰页面有解析的过程,所以会有一定性能开销的