2, Tiles 使用配制文件,文件里定义的叫"tiles组件" 简称"组件".
语法:
配置文件里tiles-defs.xml
<definition name="com1" path="模版页面A.jsp">
<put name="menu" value="xx.jsp"/>
</definition>
这个com1组件可以拿来用.
使用模版的页面B.jsp: <tiles:insert definition="com1"/>
另外com1也可以直接在struts-config.xml中当作普通页面使用.例如,
<action forward="com1" path="/test" />
3,Tiles基本上都是使用文件定义组件这种方式.写组件文件比较烦燥,Tiles就弄了几个小方法来简化
此过程.第一个方法就是组件的参数可以是组件.组件1的参数可以是组件2,组件2的参数可以是
组件3,组件3的参数..4..5..6,子子孙孙无穷尽也.例如:
<definition name="com1" page="A.jsp">
<put name="menu" value="com2" type="definition"/>
<put name="header" value="com3" />
<put name="footer" value="com4" />
</definition>
写不写type="definition"无所谓,com2,com3,com4找不到对应文件,就到组件里找.他们必须
也在组件文件里定义好:
<definition name="com2" value="xx.jsp">
<put name="com2_var" value="com5"/>
</definition>
呵呵,把一些常用的东东拿出来可以重复使用.就是为了这点方便.
4,还有个省劲地写组件文件的方法,组件继承.同样可以子子孙孙无穷尽也,例如Com6继承Com5,Com5继承Com1,
Com1继承Com7....
语法如下:
<definition name="Com6" extends="Com5">
<put name="menu" name="需要改动的页面"/>
</definition>
这样就省得写Com5组件的一堆<put>和<definition page=..>了.只需要把要修改的地方换换就行了.
5,另外模版还可以定义资源串,这个串不是写死的,而是以参数的方式传入模版的.
语法如下:
模版文件A.jsp中:
<tiles:importAttibute name="自定义变量名aaa"/>
<bean:write name="自定义变量名aaa"/>
组件文件中:
<definition name="comxxx" page="A.jsp">
<put name="自定义变量名aaa" value="ApplicationResource.properties里的key值"/>
</definition>
这样在使用组建的文件中,B.jsp
<tiles:insert definition="comxxx"/>就能看到资源文件中的key值对应的Value了.
好了,这下可以看到向模版文件中不仅可以传递jsp页面,com组件,还可以传key值,下面看一个可以传list的写法
6,向模版传递list
组件文件中:
<definition ...
<putlist name="items">
<item link="xx" value="xx"/>
<item link="xx" value="xx"/>
</putlist>
</definition>
模版文件中可以使用items了,
<logic:iterator id="item" name="items">
<bean:write name="iterm property="link"/>
<bean:write name="iterm property="value"/>
</logic:iterator>
7, 还看到一个使用ControlerSupport作为基类的觉得没有多大意思,就不说了.
前提物质条件: 1.Struts Framework; 2.struts-tiles.tld
< servlet-name >action </ servlet-name >
< servlet-class >org.apache.struts.action.ActionServlet </ servlet-class >
< init-param >
< param-name >config </ param-name >
< param-value >/WEB-INF/struts-confg.xml </ param-value >
</ init-param >
<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</init-param>
< load-on-startup >1 </ load-on-startup >
</ servlet >
...
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
< set-property property ="definitions-config" value ="/WEB-INF/tiles-defs.xml" />
</ plug-in >
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
< tiles-definitions >
< definition name ="site.mainLayout" path ="/mainlayout.jsp" >
< put name ="header" value ="/header.html" />
< put name ="body" value ="/logon.jsp" />
< put name ="footer" value ="/footer.html" />
</ definition >
</ tiles-definitions >
四. mainlayout.jsp内容
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" />
< title >tiles </ title >
</ head >
< body >
< tiles:insert attribute ="header" />
< tiles:insert attribute ="body" />
< tiles:insert attribute ="footer" />
</ body >
</ html >
五.tiles的调用
index.jsp内容
< %@ taglib uri ="/tags/struts-tiles" prefix ="tiles" % >
< tiles:insert definition ="site.mainLayout" flush ="true" />
或者(无需tiles-defs.xml)
< tiles:insert template ="mainlayout.jsp" >
< tiles:put name ="title" value ="This is the title." />
< tiles:put name ="header" value ="header.jsp" />
< tiles:put name ="body" value ="body.jsp" />
</tiles:insert>
调用index.jsp时就会引用mainlayout.jsp来显示。
常用属性:
flush="true" 代表要在插入对象之前将当前页面的out对象的数据刷新出去。
ignore="true" 带边如果该属性没有值的话 什么也不返回, 如果为false 如果属性为空的话会报出异常