Tiles框架

在开发Web站点时,常常要求同一站点的所有Web页面保持一致的外观,比如有相同的 布局、页头、页尾和菜单。 网页被划分为四个部分:Header、Menu、Footer和Content。对于同一站点的所有Web页 面,Header、Menu和Footer部分的内容相同,仅仅Content部分的内容不相同。如果采用基本的JSP语句来编写所有的Web页面,显然 会导致大量的重复编码,增加开发和维护成本。
   Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。它允许先创建模板,然后在运行时动态地将内容插入到模板中。Tiles框架建立在JSP的include指令的基础上,但它提供了比JSP的include指令更强大的功能。
   Tiles框架具有如下特性:
                               创建可重用的模板
                               动态构建和装载页面
                               定义可重用的Tiles组
                               支持国际化
                               Tiles框架包含以下内容:
                               Tiles标签库
                               Tiles组件的配置文件
                               TilesPlugIn插件
  Tiles标签库的tiles:insert标签和JSP include指令具有相同的功能,也能把其他的JSP页面插入到当前页面中。例如,以下两条语句的作用是相同的:
<jsp:include page="indexContent.jsp"/>
<tiles:insert page="indexContent.jsp"flush="true"/>
  标签的page属性指定被插入的JSP文件,flush属性的可选值包括true和false,当flush属性为true,表示在执行插入操作之前,先调用当前页面的输出流的flush()方法。
  用tiles:insert标签取代JSP include指令来创建复合式页面,代码仅有稍微的差别,两者的利弊也很相似。单纯使用tiles:insert标签来创建复合式页面,还没有充分发挥Tiles框架的优势。
  通俗的讲,Tiles模板是一种描述页面布局的JSP页面。Tiles模板仅仅定义Web页面的样式,而不指定内容。在Web应用运行时,才把特定内容插入到模板页面中。同一模板可以被多个Web页面共用。
  使用模板,可以轻松的实现Web应用的所有页面保持相同的外观和布局,无需为每个页面硬编码。在一个应用中,大多数页面使用同一模板,某些页面可能需要不同的外观,使用其他的模板,因此一个应用可能有一个以上模板。
  在模板文件layout.jsp中定义了网页的布局,但没有指定各部分具体的内容。layout.jsp中包含多个tiles:insert标签,它的attribute属性仅仅指定了待插入内容的逻辑名,而没有指定真正被插入的文件。
  采用Tiles模板机制,大大提高了代码的可重用性和可维护性,模板中包含了网页共同的布局。如果布局发生变化,只需要修改模板文件,无需修改具体的网页文件。
 Tiles框架允许在专门的XML文件中配置Tiles组件。例如,以下代码定义了一个名为"index-definition"的Tiles组件,它描述整个index.jsp网页:
<tiles-definitions>
   <definition name="index-definition" path="/layout.jsp">
      <put name="sidebar" value="sidebar.jsp"/>
      <put name="header" value="header.jsp"/>  
      <put name="content" value="indexContent.jsp"/>  
      <put name="footer" value="footer.jsp"/>  
   </definition>
</tiles-definitions>
  definition元素的name属性指定Tiles组件的名字,path属性指定Tiles组件使用的模板,definition元素的put子元素用于向模板中插入具体的网页内容。
  TilesPlugin插件用于加载Tiles组件的配置文件。在plug-in元素中包含几个set-property子元素,用于向TilesPlugin插件传入附加的参数:
     ·definitions-config参数:指定Tiles组件的配置文件,如果有多个配置文件,则它们之间用逗号分隔。
     ·definitions-parser-validate参数:指定XML解析器是否验证Tiles配置文件,可选值包括true和false,默认值为true。
           通过Struts Action来调用Tiles组件
  如果Tiles组件代表完整的网页,可以直接通过Struts Action来调用Tiles组件。例如,如果希望通过Struts Action来调用名为"index-definition"的Tiles组件,可以在Struts配置文件中配置如下Action映射:
<action-mappings>
<action   path="/index"
          type="org.apache.struts.actions.ForwardAction"
          parameter="index-definition">
</action>
</action-mappings>
  接下来通过浏览器访问 http://localhost:8080/tilestaglibs/index.do,该请求先被转发到 ForwardAction,ForwardAction再把请求转发给名为"index-definition"的Tiles组件,最后在浏览器端,用 户将看到和index.jsp相同的页面。
  通过Struts Action来调用Tiles组件,可以充分发挥Struts框架负责流程控制的功能。此外,可以减少JSP文件的数目。例如,如果直接通过Struts Action来调用名为"index-definition"的Tiles组件,就不必再创建index.jsp文件。
  Tiles组件是一种可重用的组件。可以象搭积木一样,把简单的Tiles组件组装成复杂的Tiles组件。
 可以利用Tiles组件的可扩展特性来进一步消除冗余代码。解决方法为先定义一 个包含这两个Tiles组件的共同内容的父类Tiles组件,命名为"base-definition",然后再让"index-definition" 和"product-definition"这两个Tiles组件继承这个父类组件。
  一个Tiles组件继承另一个Tiles组件的语法如下,其中definition元素的extends属性指定被扩展的父类Tiles组件:
<definition name="index-definition" extends="base-definition">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值