IT修真院菜鸟一只,有对修真院感兴趣的请移步官网    http://www.jnshu.com/login/1/14708688

一.) Tiles配置

要正常使用tiles,必须在Structs配置文件中加入下列代码:  
 <plug-in className="org.apache.struts.tiles.TilesPlugin" > 
 <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml, /WEB-INF/tiles-tests-defs.xml,/WEB-INF/tiles-tutorial-defs.xml, 
 /WEB-INF/tiles-examples-defs.xml" /> 
 <set-property property="moduleAware" value="true" /> 
 <set-property property="definitions-parser-validate" value="true" /> 
 </plug-in>

1.definitions-factory-class:(可选) 
        definition factory类的名称,可以使用自己编写definition factory。如果不指定,使用国际化factory。 
2.definitions-config:(可选) 
       指定tiles的配置文件, 可以是多个,中间用逗号隔开。每个文件按次序被读取,遇到definition就添加进definition factory中。如果产生重名,后面的definition将替代前面的。 
3.moduleAware:(可选) 
       如果是true(默认值),一个Struts module就会有一个factory;如果是false,多个Struts module分享单独的一个factory。 
4.definitions-parser-validate:(可选)

如果是true(默认值),validate.DTD会在文件头中被指定;如果是false,没有validation。

二.) 把Definition's名称做为Struts Forward 
如果用Tiles' servlet替代Struts' servlet,那么你可以使用Tiles配置文件中的definition名称来替代URL。你Struts Action的配置像下面一样:

<action path="/tutorial/testAction2" type="org.apache.struts.example.tiles.tutorial.ForwardExampleAction"> 
 <forward name="failure" path="forward.example.failure.page"/> 
 <forward name="success" path="forward.example.success.page"/> 
 </action>

在这里你的Action代码和以前一样,但forward mapping现在被指定为一个definition名称,当action forward碰到definition名称时,它就装载definition,创建并初始化Tile's attributes相关的内容,再插回到definition中�

三.) 为View准备数据:添加一个控制器(controller) 
 我们常常需要给Jsp页面传递一些计算好的数据。MVC框架中,控制器用来做这个事情。要解析Tiles和Struts,我们可以用一个Struts Action作为controller,一个JSP页面作为一个view,然后在Tile中将两者组合。所以当你插入Tile时,在Jsp页面显示前Action会先被调用。
 Tils可以通过controller(每个Tile对应一个sub-controller)产生,再合成的一个完整的web页面。这个方法比用一个单独的controller来控制所有Tile的页面要好,因为它允许独立的构建Tile,而不用担心怎样传递数据。 
有几种方法能够把Action和一个View做为一个Tile: 
在<insert>或<definition>中使用Action类名或Action URL。  
让struts-config.xml中的Action指向一个definition名称。在tiles-onfig.xml文件中指定一个含URL的difinition和一个含有view的difinition。第一个difinition作为一个完整的Tile difinition(action+view),第二个difinition作为view difinition。  
可以让多个view和一个controller结合。选择一个恰当的controller,对于有main view和error view来说是很有用的。和以前一样,但可以多个forward到一个view definition。 
 将controller放入中Tile最简单的方法是在<insert>和<definition>中指定,可以是本地URL或一个类。在Jsp页面显示前controller被调用。controller使用共享的Tile内容填充Jsp页面,所以它可以读取、修改和添加Tile属性。controller一般用来做这么几件事情:model的数据被传递到view前进行处理;属性传递到view前对其进行修改或添加。 
 你可以使用当前web应用程序的Structs Action URL来做为controller,你的action可以扩展org.apache.struts.action.TilesAction,来替代Structs Action类。TilesAction继承原来的execute()方法。还提供了一个新的execute()方法,这个方法多了"tileContext"参数,当你需要处理Tile的属性是很有用。 
 <tiles:insert page="layout.jsp" controllerUrl="myAssociatedAction.do” > 
 <tiles:put name="title" value="Test controller set in insert" /> 
 <tiles:put name="header" value="header.jsp" /> 
 <tiles:put name="body" value="body.jsp" /> 
 </tiles:insert>

Structs Action中的描述: 
 <action path="/myAssociatedAction" type="org.apache.struts.example.tiles.MyAssociatedAction"> 
 </action>

Action中的描述: 
 public final class MyAssociatedAction extends TilesAction { 
 public ActionForward execute( ComponentContext context,ActionMapping mapping,ActionForm form, 
 HttpServletRequest request, HttpServletResponse response) 
 throws IOException, ServletException{ 
 String title = (String)context.getAttribute( "title" ); 
 System.out.println( "Original title" + title ); 
 context.putAttribute( "title", "New Title" ); 
 return null; 
 } 
}

如果你使用类名做为controller,就必须继承下面基类或接口中的一个: 
 org.apache.struts.tiles.Controller:这是个controller接口定义了cintorller方法。这些方法接收包含当前Tile内容的参数和普通的servlet参数(request、response和servletContext)。 
 org.apache.struts.tiles.ControllerSupport:这是个底层类,没有方法。 
 <tiles:insert page="layout.jsp" controllerClass="org.apache.struts.example.tiles.test.TestTileController" > 
 <tiles:put name="title" value="Test controller set in insert" /> 
 <tiles:put name="header" value="header.jsp" /> 
 <tiles:put name="body" value="body.jsp" /> 
 </tiles:insert>

在definition中使用的例子: 
 <definition name="tileWithActionAsController" path="/actionAsController.do" > 
 <put name="title" value="Title" /> 
 <put name="anAttribute" value="aValue" /> 
 </definition>

Action被用作controller: <action path="/ actionAsController " type="org.apache.struts.example.tiles.ActionAsController"> 
 <forward name="failure" path="/failurePage.jsp"/> 
 <forward name="success" path="success.definition"/> 
 </action>

一.) 常用到的layout 
Tiles有个令人感兴趣的地方,它可以复用现有的layout,定义一个新的layout,简单改变一下属性设置就可以扩展一个layout。对于一个layout,只不过是以现有页面为基础,抽取并提供一些属性的描述。 
注:在jakarta-struts-1.2.2中的tiles-documentation.war有相关的代码。

Classic layout 
这个layout经常会被web站点采用。它提供典型的"header, menu, body ,footer",用<header>和<body>做为HTML页面的骨架,在恰当的地方放置header、menu、body、footer。  
所需属性: 
tiltle - String类型; 
header、menu、body、footer - URL或definition名称。  
调用layout的代码: 
 <tiles:insert page="/layouts/classicLayout.jsp" flush="true"> 
 <tiles:put name="title" value="Browser Title" /> 
 <tiles:put name="header" value="/header.jsp" /> 
 <tiles:put name="footer" value="/footer.jsp" /> 
 <tiles:put name="menu" value="/menu.jsp" /> 
 <tiles:put name="body" value="definition.name" /> 
 </tiles:insert>

也能够在definition中调用: 
 <definition name="mainLayout" path="/layouts/classicLayout.jsp"> 
 <put name="title" value="Browser Title" /> 
 <put name="header" value="/header.jsp" /> 
 <put name="footer" value="/footer.jsp" /> 
 <put name="menu" value="menu.main" /> 
 <put name="body" value="main.portal.body" /> 
 </definition>

layout的代码: <HTML> 
 <HEAD> 
 <link rel=stylesheet href="<%=request.getContextPath()%>/layouts/stylesheet.css" type="text/css"> 
 <title><tiles:getAsString name="title"/></title> 
 </HEAD> 
 <body bgcolor="#ffffff" text="#000000" link="#023264" alink="#023264" vlink="#023264"> 
 <table border="0" width="100%" cellspacing="5"> 
 <tr><td colspan="2"><tiles:insert attribute="header" /></td> 
 </tr> 
 <tr><td width="140" valign="top"><tiles:insert attribute='menu'/></td> 
 <td valign="top" align="left"><tiles:insert attribute='body' /></td> 
 </tr> 
 <tr><td colspan="2"><tiles:insert attribute="footer" /></td> 
 </tr> 
 </table></body></html>

Menu Layout 
这个layout用于带有链接的菜单。一个菜单需要一个"item" bean列表,每个"item"包含一个子菜单的数据。可以用一个属性相同的menu layout来代替另一种menu layout(例如可以用vbox layout构建一个垂直的menu,下面会讲到)。  
所需属性 
title - String类型,做为菜单标题(可选)。 
items - List类型,Items 是带有vlaue、link、tooltip、icon参数的bean。  
调用layout的代码: <definition name="examples.menu.settings" path="/layouts/menu.jsp" >
 <put name="title" value="Preferences" /> 
 <putList name="items" > 
 <item value="my Portal Settings" link="/examples/myPortalSettings.jsp" classtype="org.apache.struts.tiles.beans.SimpleMenuItem" /> 
 <item value="my Menu Settings" link="/examples/myMenuSettings.jsp" classtype="org.apache.struts.tiles.beans.SimpleMenuItem" /> 
 </putList> 
 </definition>

definition中描述了两个属性:tilte和list。list是一个item bean 列表,每个item相当于菜单中的一个选项,包含一些参数,value表示选项的标题,link表示链接。  
layout的代码: <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> 
 <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 
 <%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %> 
 <%@ page import="java.util.Iterator" %>

<%-- Push tiles attributes in page context --%>

 <tiles:importAttribute /><table> 
 <logic:present name="title"> 
 <tr><th colspan=2> 
 <div align="left"><strong><tiles:getAsString name="title"/></strong></div></th> 
 </tr> 
 </logic:present> 
 <%-- iterate on items list --%> 
 <logic:iterate id="item" name="items" type="org.apache.struts.tiles.beans.MenuItem" > 
 <% // Add site URL if link starts with "/" 
 String link = item.getLink(); 
 if(link.startsWith("/") ) link = request.getContextPath() + link; 
 %> 
 <tr><td width="10" valign="top" ></td> 
 <td valign="top" ><font size="-1"><a href="<%=link%>"> 
 <logic:notPresent name="item" property="icon"><%=item.getValue()%></logic:notPresent>
 <logic:present name="item" property="icon"> 
 <% // Add site URL if link starts with "/" 
 String icon = item.getIcon(); 
 if(icon.startsWith("/") ) icon = request.getContextPath() + icon; 
 %> 
 <img src='<%=request.getContextPath()%><bean:write name="item" property="icon" scope="page"/>' 
 alt='<bean:write name="item" property="tooltip" scope="page" ignore="true"/>' /> 
 </logic:present></a></font></td> 
 </tr> 
 </logic:iterate></table>

VBox 或 VStack Layout 
这个layout用于垂直的显示Tile列表,常被菜单条或multi - columns layout采用。  
所需属性 
list - 要插入的列表名称或URL  
调用的layout代码: <definition name="examples.menu.bar" path="/layouts/vboxLayout.jsp" > 
 <putList name="list" > 
 <add value="examples.userMenu" /> 
 <add value="examples.menu.links" /> 
 <add value="doc.menu.links" /> 
 <add value="examples.menu.settings" /> 
 <add value="doc.menu.taglib.references" /> 
 <add value="doc.menu.printer.friendly" /> 
 <add value="examples.menu.admin" /> 
 </putList>

layout代码: <%@ page import="java.util.Iterator"%> 
 <%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %> 
 <tiles:useAttribute id="list" name="list" classname="java.util.List" /> 
 <% // 用Tile 属性初始化一个脚本变量。 
 // 这里不使用<logic:iterate>标签,因为在JSP1.1不允许这么做。 
 <% 
 Iterator i=list.iterator(); 
 while( i.hasNext() ) 
 { 
 String name= (String)i.next(); 
 %> 
 <tiles:insert name="<%=name%>" flush="true" /> 
 <br> 
 <% 
 } // end loop 
 %>

Multi-columns Layout 
这个layout垂直显示Tile多行列表。每一行代表一个列表,常用来构建多个Tile主体的入口。  
所需属性 
numCols - 行数 
list1 - 第一个Tile列表 
list2、list3、listn - 第n个Tile类别(可选)  
调用的代码: <definition name="examples.portal.body" path="/layouts/columnsLayout.jsp" controllerUrl="/portal/myPortal.do" > 
 <put name="numCols" value="2" /> 
 <putList name="list0" > 
 <add value="/examples/tiles/portal/login.jsp" /> 
 <add value="/examples/tiles/portal/messages.jsp" /> 
 <add value="/examples/tiles/portal/newsFeed.jsp" /> 
 </putList> 
 <putList name="list1" > 
 <add value="/examples/tiles/portal/advert3.jsp" /> 
 <add value="/examples/tiles/portal/stocks.jsp" /> 
 <add value="/examples/tiles/portal/whatsNew.jsp" /> 
 <add value="/examples/tiles/portal/advert2.jsp" /> 
 </putList> 
 </definition>

layout的代码: <tiles:useAttribute id="numColsStr" name="numCols" classname="java.lang.String" /> 
 <table> 
 <tr>

<% 
 int numCols = Integer.parseInt(numColsStr); 
 ComponentContext context = ComponentContext.getContext( request ); 
 for( int i=0; i<numCols; i++ ) 
 { 
 java.util.List list=(java.util.List)context.getAttribute( "list" + i ); 
 pageContext.setAttribute("list", list ); 
 if(list==null) 
 System.out.println( "list is null for " + i ); 
 %> 
 <td valign="top"> 
 <tiles:insert page="/layouts/vboxLayout.jsp" flush="true" > 
 <tiles:put name="list" beanName="list" beanScope="page" /> 
 </tiles:insert> 
 </td> 
 <% 
 } // end loop 
 %> 
 </tr> 
 </table>

这边同样也不能使用<logic:iterate>标签,在JSP1.1不允许在一个标记体内插入另一个页面。
Center Layout 
这个layout常由"top, left, center, right, bottom"组成,left和right部分是可选的。  
所需属性 
header、body、footer - 用difinition名称或URL显示相应的部分。 
right、left - 用difinition名称或URL显示相应的部分(可选)。  
调用layout的代码:和classic layout类似 <tiles:insert page="/layouts/centerLayout.jsp" flush="true"> 
 <tiles:put name="header" value="/header.jsp" /> 
 <tiles:put name="footer" value="/footer.jsp" /> 
 <tiles:put name="right" value="/menu.jsp" /> 
 <tiles:put name="left" value="/menuLeft.jsp" /> 
 <tiles:put name="body" value="definition.name" /> 
 </tiles:insert>

也可以忽略left和right部分: <tiles:insert page="/layouts/centerLayout.jsp" flush="true"> 
 <tiles:put name="header" value="/header.jsp" /> 
 <tiles:put name="footer" value="/footer.jsp" /> 
 <tiles:put name="body" value="definition.name" /> 
 </tiles:insert>

layout的代码: <%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %> 
 <table border="0" width="100%" cellspacing="5"> 
 <tr> 
 <td colspan="3"><tiles:insert attribute="header" /></td> 
 </tr> 
 <tr> 
 <td width="140" valign="top"> 
 <tiles:insert attribute=right ignore='true'/> 
 </td> 
 <td valign="top" align="left"> 
 <tiles:insert attribute='body' /> 
 </td> 
 <td valign="top" align="left"> 
 <tiles:insert attribute='left' ignore='true'/> 
 </td> 
 </tr> 
 <tr> 
 <td colspan="3"> 
 <tiles:insert attribute="footer" /> 
 </td> 
 </tr> 
 </table>

Tabs Layout 
这个layout用表格的形式来呈现Tile类表。Tabs Layout有一个body区域,用来显示当前被选中的Tile;还有一个索引区域,显示可用的表格或Tile。  
所需属性 
tabList - 列表的URL或definition名称,我们用MenuItem来存储数据。 
selectedIndex - 默认被选中的表格 
parameterName - HTTP参数名,在HTTP request中存储选中的Tile信息。  
调用layout的代码:创建了带有三个索引的tab layout <definition name="examples.tabs.body" path="/layouts/tabsLayout.jsp" > 
 <put name="selectedIndex" value="0" /> 
 <put name="parameterName" value="selected" /> 
 <putList name="tabList" > 
 <item value="Doc Home" link="/index.jsp" classtype="org.apache.struts.tiles.beans.SimpleMenuItem" /> 
 <item value="Quick overview" link="/doc/quickOverview.jsp" classtype="org.apache.struts.tiles.beans.SimpleMenuItem" /> 
 <item value="Tutorial" link="/doc/tutorial.jsp" classtype="org.apache.struts.tiles.beans.SimpleMenuItem" /> 
 </putList> 
 </definition>

layout的代码: <%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %> 
 <tiles:useAttribute name="parameterName" classname="java.lang.String" /> 
 <tiles:useAttribute id="selectedIndexStr" name="selectedIndex" ignore="true" classname="java.lang.String" /> 
 <tiles:useAttribute name="tabList" classname="java.util.List" /> 
 <% 
 String selectedColor="#98ABC7"; 
 String notSelectedColor="#C0C0C0"; 
 int index = 0; // Loop index 
 int selectedIndex = 0; 
 // Check if selected come from request parameter 
 try { 
 selectedIndex = Integer.parseInt(selectedIndexStr); 
 selectedIndex = Integer.parseInt(request.getParameter( parameterName )); 
 } 
 catch( java.lang.NumberFormatException ex ) 
 { // do nothing 
 } 
 // Check selectedIndex bounds 
 if( selectedIndex < 0 || selectedIndex >= tabList.size() ) selectedIndex = 0; 
 String selectedBody = 
 ((org.apache.struts.tiles.beans.MenuItem)tabList.get(selectedIndex)).getLink(); // Selected body 
 %><table border="0" cellspacing="0" cellpadding="0"> 
 <%-- Draw tabs --%> 
 <tr><td width="10""> </td> 
 <td> 
 <table border="0" cellspacing="0" cellpadding="5"> 
 <tr><logic:iterate id="tab" name="tabList" type="org.apache.struts.tiles.beans.MenuItem" >
 <% // compute href 
 String href = request.getRequestURI() + "?"+parameterName + "=" + index; 
 String color = notSelectedColor; 
 if( index == selectedIndex ) 
 { 
 selectedBody = tab.getLink(); 
 color = selectedColor; 
 } // enf if 
 index++; 
 %> 
 <td bgcolor="<%=color%>"><a href="<%=href%>" /><%=tab.getValue()%></a></td> 
 <td width="1" ></td> 
 </logic:iterate> 
 </tr></table></td> 
 <td width="10" > </td></tr> 
 <tr><td height="5" bgcolor="<%=selectedColor%>" colspan="3" > </td></tr> 
 <%-- Draw body --%> 
 <tr><td width="10" bgcolor="<%=selectedColor%>"> </td> 
 <td><tiles:insert name="<%=selectedBody%>" flush="true" /></td> 
 <td width="10" bgcolor="<%=selectedColor%>"> </td></tr> 
 <tr><td height="5" bgcolor="<%=selectedColor%>" colspan="3" > </td> 
 </tr></table>

Tiles的使用,遗漏和总结相关推荐

  1. SpringMVC集成Tiles布局引擎框架

    Tiles布局框架, http://tiles.apache.org/ Spring已经对Tiles进行了集成.页头页尾公共模板页要靠这个,不然重复代码太多. <dependency>&l ...

  2. Apache Tiles 学习(四)、Tiles实战

    为什么80%的码农都做不了架构师?>>>    1.创建maven项目 New-->Maven Project--> 勾选上Create a simple project ...

  3. 掌握Tiles框架 (二)-- Tiles布局和定义

    1. Tile 布局 构建第一个 tile 布局 如果站点能够重用相同的布局(使用 HTML 表格来实现)和图像,而不必重复相同的 HTML 代码,这样不是很好吗? Tile 在为站点创建共同的外观方 ...

  4. IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认值改变为submit了。

    IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认值改变为submit了. 参考文章: (1)IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认 ...

  5. linux find命令 报错 遗漏"-exec"的参数 解决方法

    错误示例 find ./jquery-ui/ -name "*svn" -exec rm -rf {}\; 这样写会报错,"find: 遗漏"-exec&quo ...

  6. Tiles Framework

    tiles framework 详解tiles framework 详解 就是一个页面模版引擎.可以渲染页面,属于视图层. 下面给你拷贝一份详细的tiles介绍,你可以初步了解一下. Tiles框架特 ...

  7. Windows Phone 8.1 Tiles, Notifications and Action Center

    (1)Tiles Tiles 也就是磁贴,是 Windows Phone 的一大特色. 一个 Tile 其实可以看成是一个 XML,比如: <tile><visual>< ...

  8. Day8 Python基础之遗漏知识点(六)

    1. 遗漏知识点 深.浅拷贝:   http://www.cnblogs.com/yuanchenqi/articles/5782764.html a=b: 浅拷贝: 深拷贝 集合(set) 集合的定 ...

  9. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

    一.SiteMesh项目简介 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较 ...

  10. 初次转化max模型为3D Tiles失败、cesium加载一个obj格式的3D 机房模型

    先下一个3D max模型,后缀为.max:用3D max打开:网上下的其他模型查看器不能打开: 打开时会出错误提示:对max模型文件和3d max还不了解: 打开后如下:是一个机房的3D模型: 下载一 ...

最新文章

  1. 波士顿动力新年视频第一发,机器人狗能为朋友开门了!
  2. 标准化工作取得新突破 窄带物联网商用指日可待
  3. ff14服务器维护怎么办,《FF14》8月20日维护到几点 最终幻想14服务器迁移维护公告...
  4. Spring Boot 2.3.0——以war方式打包失败[webxml attribute is required]解决方案
  5. Go语言入门篇-使用Beego构建完整web应用
  6. vmware linux ens32,修改Centos7的网卡ens32 改为eth0
  7. 17 合作伙伴角色‘OA’不允许用于科目组xxxx的供应商
  8. 2017.9.1 公路修建问题 思考记录
  9. 电力企业计量生产需求系统解决方案
  10. JavaScript常用算法 1
  11. 【python爬虫】第11章——scrapy框架持久化存储
  12. 计算机里多了一个硬盘q,电脑上多了个本地磁盘Q怎么回事
  13. 基于51单片机智能小车的设计与实现
  14. [论文阅读] (13)英文论文模型设计(Model Design)如何撰写及精句摘抄——以入侵检测系统(IDS)为例
  15. C语言编程:求水仙花数。输入一个正整数n,计算n位水仙花数。
  16. PAT做题过程中的一些方法技巧总结
  17. 如何让虚拟机可以联网
  18. 【Acwing并查集】238. 银河英雄传说
  19. 【AI女神节特稿】人工智能领域你不能忽视的 12 位女性
  20. “战术竞技类”外挂打击已开始!揭秘腾讯We Test游戏安全服务新动作!

热门文章

  1. Vue项目中使用xlsx实现批量导入导出功能
  2. 番外9福冈·狂野老司机告诉你如果装AI·1· ——混合现实科幻《地与光》
  3. AliDDNS 阿里云动态域名服务 实用工具
  4. 目标文件(.obj)的COFF文件结构
  5. 2022年全球与中国电动汽车充电设备市场现状及未来发展趋势
  6. 外语学习的真实方法及误区
  7. 编辑器 UEditor 百度富文本web编辑器
  8. 如何用python做动画_如何使用python制作简单的动画?
  9. Screen Snapshot for Mac(屏幕截图工具)
  10. 故宫,中国古代建筑艺术的奇葩