分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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" %>

配置Tiles和Struts协同工作

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

提示:若使用tiles框架的先前版本,您必须在web.xml文件中配置一个叫做ActionComponentServlet的特殊ActionServlet,而且在Struts的controller元素中还需配置一个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配置文件,允许值为true和false,缺省值为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?

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

图14-1 Storefront应用程序的区域

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

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

使用布局tile

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

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

布局也是受到高度评价的tiles。JSP页面,甚至整个应用程序都能复用布局。通常建立一个布局库,用于许多不同的项目中。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属性,它可以允许当找不到属性所引用的文件时什么东西都不输出。缺省时,如果属性所指定的文件没有提供的话,运行时异常将抛出。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有