Jakarta Struts编程:使用Tiles,第二部分

http://www.csdn.com.cn/program/1905.htm

Jakarta Struts编程:使用Tiles,第二部分

作者:Chuck Cavaness   陈正勇(zhengyongchen@21cn.com)

        本文是从《Programming Jakarta Struts》摘录的系列文章的第二部分,我们将学习如何安装和配置Tiles,并全面了解tiles

 

安装和配置Tiles

在您能够使用Tiles 框架之前,您必须确保它已安装并正确的配置在web容器中。Tiles框架并不依赖于某种特定的容器,您要做的就是获得所需的文件,并将它们放到web应用程序的正确位置上。

 

下载Tiles

Tiles框架包含在struts发行版中。先前版本中,它位于contrib文件夹中,但现在是核心的一部分。您还可以在http://www.lifl.fr/~dumoulin/tiles/index.html找到最新的源程序、二进制发行版本,以及其它一些有用的信息。

 

安装所需的JAR文件和相关文件

第一步是安装所需文件。对于Tiles来说,以下文件必须位于WEB-INF/lib目录中:

u       tiles.jar

u       commons-digester.jar

u       commons-beanutils.jar

u       commons-collections.jar

u       commons-logging.jar

如果您在使用struts,这些文件就已经存在了,此外您还需要安装Tiles TLD文件到应用程序的WEB-INF目录。

警告:不要为了避免将tiles.jar文件放到每个web应用程序的WEB-INF/lib目录,而将它放到servlet容器的classpath路径中,如果这样做的话会导致抛出ClassNotFoundException异常。

您还应该将tiles-config.dtd文件放到WEB-INF 目录。该DTD文件用来验证Tiles 定义文件(它将在本章的后面部分讲到)。

 

添加Tiles标签库

就象 其它的JSP标签库一样,在您能使用它们之前,您必须将Tiles标签库加入web应用程序发布描述文件中。给web.xml文件增加如下taglib元素:

<taglib>
  
  
  <taglib-uri>/WEB-INF/tiles.tld</taglib-uri>
  
  
  <taglib-location>/WEB-INF/tiles.tld</taglib-location>
  
  
</taglib>

如果您在使用标准的struts标签库,那么taglib元素应该已经有了。每个需要使用Tiles标签库的页面必须在顶部包含如下行:

<%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %>
  
  

 

配置TilesStruts协同工作

Tiles框架可以和struts一起使用,也可单独使用。取决于您如何使用它,为web应用程序配置tiles可以有几种选择。因为本书是讲struts的,所以我们的重点是如何将其捆绑到struts应用程序。

 

提示:若使用tiles框架的先前版本,您必须在web.xml文件中配置一个叫做ActionComponentServlet的特殊ActionServlet,而且在Strutscontroller元素中还需配置一个RequestProcessor。现在这些不需了-现在有一个tiles插件,它来完成所有的初始化。

如果您正计划使用tiles,该插件是非常需要的。您也可不配置该插件而使用tiles库和struts。但是,配置它也没有什么害处,如果您以后决定使用tiles定义,它还可能节约您的时间。

struts应用程序中加入tiles插件,请在struts配置文件中加入下列plug-in元素:

<plug-in className="org.apache.struts.tiles.TilesPlugin" >
  
  
  <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
  
  
  <set-property property="definitions-debug" value="2" />
  
  
  <set-property property="definitions-parser-details" value="2" />
  
  
  <set-property property="definitions-parser-validate" value="true" />
  
  
</plug-in>

plug-in元素中,您可以加入几个set-property元素给Plugin类传入附加的参数。definitions-config参数指定包含tiles定义的xml文件。如果使用了多个文件名,则它们之间用逗号分隔。

definitions-debug参数指定调试的层次,允许值为:

0 :不输出调试信息。

1 :提供部分调试信息。

2 :提供完整的调试信息。

缺省值为0

definitions-parser-details参数指定当定义文件被解析时所需要的调试信息的层次,该值传给Commons Digester。所允许的值同definitions-debug参数,缺省值为0

definitions-parser-validate参数指明解析器是否验证Tiles配置文件,允许值为truefalse,缺省值为true

还有一个叫做definitions-factory-class的参数没有显示出来。您可以创建一个自定义工厂,然后在这里给出类名,缺省值为org.apache.struts.tiles.xmlDefinition.I18NfactorySet

 

Tiles纵览

Tiles框架提供一种模板机制,它能将布局和内容的职责分离。本章前面描述的模板,允许您先创建模板,然后在运行时动态地将内容插入到布局中。如果您要根据国际化、用户喜好定制您的站点,或仅仅改变视感(这在每个网站迟早会发生的),您就会发觉模板是一个强有力的机制。Tiles框架具有如下特性:

u       模板能力

u       动态构建和装载页面

u       视屏定义

u       支持tile和布局重用

u       支持国际化

u       支持多通道

模板标签库已经存在于struts框架中相当长的时间了,这些标签可让您使用非常基本的模板方式在web应用程序中组织JSP页面。虽然这些标签对分离web应用程序的布局和内容很有帮助,但tiles框架走的更远,它实际上是模板标签库的超集,具备许多其它特性。

 

提示:tiles框架先前被称做Components,后来因为Component这个术语被滥用而改名。在tiles文档和源程序中某些地方仍然在沿用老的名称。

 

Cedric Dumoulin创立了tiles框架,它扩展了模板的概念,提供给开发人员在用JSP技术创建web应用程序时更大的灵活性和自由度。Web应用程序的内容仍然用JSP页面和JavaBeans驱动,但是布局由一个独立的JSP页面或XML文件(后面将提到)指定。

 

什么是tile

Tileweb页面的一个区域,一个页面可以只有一个区域组成,或分解为几个区域。14-1列举了Storefront应用程序的一个例子。

14-1 Storefront应用程序的区域

一个JSP页面通常由几个区域或tile组成,关于页面没有什么特别的,仅仅是用在tiles框架中,并使用tiles标签库。

Tile最重要的方面在于它是可复用的,对于布局和内容来说都是正确的。不同于大多数JSP页面,tiles组件在应用程序中重复利用,甚至可能跨应用程序复用。而且,tile不复杂。实际上,我们已经看到的大多数例子,包括14-214-4,都能归类为tiles

 

使用布局tile

tiles的世界里,布局就是我们已经提及的模板。布局起着模板同样的作用,即组合一组tile来指定页面的格式。实际上,14-2就是一个tile布局。Tilesstruts中包含的模板库在语法上几乎完全一样。

 

提示:tiles框架是David Geary所定义的标准struts模板标签的功能上的超集,但它提供更多的功能,进一步扩展了模板的概念。

 

布局也是受到高度评价的tilesJSP页面,甚至整个应用程序都能复用布局。通常建立一个布局库,用于许多不同的项目中。Tiles框架自带有几个预建立的布局tiles,您可复用它或是根据需要修改它。Tiles框架包含的布局有:

u       Classic布局:具有页头、左列菜单、主体、和页脚

u       Columns布局:具有多列,每列垂直堆叠

u       Center布局:具有页头、左帧、右帧、主体和页脚

u       Menu布局:具有链接菜单

u       Tabs布局:

u       Vertical box布局:

由于tiles的主要目标之一是重用性,因此您可在应用程序中只需少许修改或不修改即可重用这些布局。当然您也可自由地根据需要定制布局。

 

规划布局

提早规划布局是非常重要的,在网站建立之后再决定外观绝对不知一个好方法。通常由人性化团队、产品管理或是web开发人员自身做这种决定。不管怎样,您应该在开发之前规划布局。

Storefront应用程序的缺省布局在14-2中介绍了,该布局将作为例子贯穿本章。

 

传参数给布局

14-2所示的布局tile是一般的,它并不知道itemdetail.jsp或其它页面的内容。这样做是有目的的,它能让我们在很多页面中复用该布局。与在布局页面中硬编码不同,内容是在运行时作为参数传递给布局页面的。让我们来看看storefront应用程序的signin.jsp tile,如例14-5所示:

 

14-5: storefront应用程序的signin.jsp tile

<%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %>
  
  
 
  
  
<tiles:insert page="../layouts/storefrontDefaultLayout.jsp" flush="true">
  
  
  <tiles:put name="header" value="../common/header.jsp"/>
  
  
  <tiles:put name="menubar" value="../common/menubar.jsp"/>
  
  
  <tiles:put name="body-content" value="../security/signin-body.jsp"/>  
  
  
  <tiles:put name="copyright" value="../common/copyright.jsp"/>        
  
  
</tiles:insert>

14-5中的put标签的作用是提供布局tile,布局由包含的insert标签指定。14-5中的name属性的值必须和所期望的布局tile相吻合。

 

提示:insert标签有一可选ignore属性,它可以允许当找不到属性所引用的文件时什么东西都不输出。缺省时,如果属性所指定的文件没有提供的话,运行时异常将抛出。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Preface<br>Over the last few years, web development has turned a very important corner. Gone are the days when Java™ developers wrestled with a single JSP that contained presentation logic, database access via SQL, and navigational intelligence. Java web developers have learned from their mistakes, paid the price in debugging and maintenance time, and moved on.<br><br>The number and variety of readily available web frameworks today is immense. It's hard to point a browser at a Java technical site without finding a newly released web framework that's going to revolutionize the modern world. While some may see this as a bad thing that might divide the Java community, the truth is that the constant emergence of new frameworks is just evolution at work.<br><br>The design and construction of today's nontrivial web applications pushes developers to the limit of what's logically and physically possible. Myriad solutions are thrown at the problems these applications present. Some of the solutions stick, and as with human evolution, valuable characteristics are passed on in future generations of software. Other solutions do not—those that fail to serve the needs of users and add value usually fall by the wayside.<br><br>Through this evolutionary process, the Jakarta Struts framework (created by Craig R. McClanahan and donated to the Apache Software Foundation in 2000) has emerged as one of the best web frameworks available. This book covers Version 1.1, which contains many major enhancements over the previous Jakarta Struts release. If you are building applications, web-based or not, one of the main things you will learn from this book is that frameworks such as Struts are a great time investment.<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值