继前一篇所写的Tiles的配置信息中,具有继承性 的这一特性,确实给我们带来了不少的方便。
但除此之后,Tiles2给我们的,还有更多好的惊喜呢。
1、List Attribute 列表属性
1.1简单的例子
配置:
使用<put-list-attribute>标签
<definition name="myapp.homepage.body" template="/layouts/variable_rows.jsp"> <put-list-attribute name="items"> <add-attribute value="/tiles/banner.jsp" /> <add-attribute value="/tiles/common_menu.jsp" /> <add-attribute value="/tiles/credits.jsp" /> </put-list-attribute> </definition>
template 对应的 jsp中:
使用c标签中的进行遍历。
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> <tiles:useAttribute id="list" name="items" classname="java.util.List" /> <c:forEach var="item" items="${list}"> <tiles:insertAttribute value="${item}" flush="true" /> <br/> </c:forEach>
1.2 属性列表的继承
<definition name="myapp.homepage.body" template="/layouts/variable_rows.jsp"> <put-list-attribute name="items"> <add-attribute value="/tiles/banner.jsp" /> <add-attribute value="/tiles/common_menu.jsp" /> <add-attribute value="/tiles/credits.jsp" /> </put-list-attribute> </definition> <definition name="myapp.homepage.body.extended" extends="myapp.homepage.body"> <put-list-attribute name="items" inherit="true"> <add-attribute value="/tiles/greetings.jsp" /> </put-list-attribute> </definition>
这就实现在列表属性的继承,这里,在引入的地方所包含的就有着:
* /tiles/banner.jsp * /tiles/common_menu.jsp * /tiles/credits.jsp * /tiles/greetings.jsp
2、Tiles2 运行合成
当工程在执行的时候,允许在jsp中自行的去修改<definition>或属性等,看下面例子:
2.1 jsp中进行动态的往definition中加入属性
<tiles:insertTemplate template="/layouts/classic.jsp"> <tiles:putAttribute name="title" value="Tiles tutorial homepage" /> <tiles:putAttribute name="header" value="/tiles/banner.jsp" /> <tiles:putAttribute name="menu" value="/tiles/common_menu.jsp" /> <tiles:putAttribute name="body"> <tiles:insertTemplate template="/layouts/variable_rows.jsp"> <tiles:putListAttribute name="items"> <tiles:addAttribute value="/tiles/banner.jsp" /> <tiles:addAttribute value="/tiles/common_menu.jsp" /> <tiles:addAttribute value="/tiles/credits.jsp" /> </tiles:putListAttribute> </tiles:insertTemplate> </tiles:putAttribute <tiles:putAttribute name="footer" value="/tiles/credits.jsp" /> </tiles:insertTemplate>
2.2 插入临时修改的definition
这在jsp中,临时对该definition进行某些属性的重写
<tiles:insertDefinition name="myapp.homepage.customer" template="/layouts/alternative_layout.jsp"> <tiles:putAttribute name="menu" value="/tiles/common_menu_for_customers.jsp" /> </tiles:insertDefinition>
2.3definition的临时创建和使用
在jsp中
<tiles:definition name="myapp.homepage.customer" extends="myapp.homepage"> <tiles:putAttribute name="menu" value="/tiles/common_menu_for_customers.jsp" /> </tiles:definition> <tiles:insertDefinition name="myapp.homepage.customer" />
3、使用API对Tiles2容器管理(还未理解好,碰到取不到Container的问题)
TilesAttributeContext attributeContext = container.getAttributeContext(request,response); TilesAttributeContext attributeContext = container.startContext(request, response); //这个Context还不知道怎么取到,程序编译不过。