Shuffy

不断的学习,不断的思考,才能不断的进步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

Tiles框架使用总结

Posted on 2011-10-09 10:45 Shuffy 阅读(404) 评论(0)  编辑 收藏 引用 所属分类: 在线推荐阅读JavaWeb开发技术

Tiles框架的提出背景:
传统的GUI工具包,如Java AWT和Java Swing,都提供了一些功能强大的布局管理器,它们指定各个视图组件在窗口中的分布位置。布局管理器有助于创建复合式的复杂界面,一个复合式界面由一些简单的基本界面组成。
利用布局管理器来创建GUI界面有以下优点:
         可重用性:基本界面可以被重用,组合成各种不同的复合式界面
         可扩展性:可以方便的扩展基本界面,从而创建更复杂的界面(其实此处我的感觉并非如此,可扩展性并不是为了创建复杂界面的,越是复杂的界面在比较独立的情况下更容易创建。)
         可维护性:每个基本界面之间相互独立,当复合式界面中的局部区域发生变化,不会影响其它区域
         不幸的是,JSP技术本身并没有直接提供布局或布局管理器。为了简化Web页面的开发,提高可重用性和可扩展性,Struts Tiles框架提供了一种模板机制,模板定义了网页的布局,同一模板可以被多个Web页面共用。此外,Tiles框架还允许定义可重用的Tiles组件,它可以描述一个完整的网页,也可以描述网页的局部内容。简单的Tiles组件可以被组合或扩展成为更复杂的Tiles组件。
 
 
Tiles框架的基本用法:
       使用Tiles框架大大提高了视图层程序代码的可重用性、可扩展性和可维护性,也增加了开发视图的难度和复杂度,在使用Tiles框架之前一定要结合Web应用的规模。
在开发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插件
 
采用JSP include指令来创建复合式页面,已经在提高代码可重用性方面迈出了正确的一步。通过JSP include指令把这些相同内容包含进来,这样提高了代码的可重用性。但是JSP include指令不能完全避免代码冗余。
  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">
 
文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/1_web/webjs/20071226/95178.html


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理