Struts中Tiles标签简介

原创 2003年09月29日 00:43:00

Tiles简介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

我发现在看到的这些关于Tiles的文档中,Struts文档中关于这方面的介绍对于初学者来说是最好的(个人认为),所以就把它译了过来,对于想了解这方面东西又不想看E文的同胞,可以参考一下。翻译的漏洞在所难免,希望大家对照原文看,出现的错误希望大家帮我指正,谢谢。

 

                                                                  


 

    1.简介

 

Tiles框架可以令我们组合可以复用的Tiles来搭建网页。例如,下图中的页面就是通过组合一个header, 一个footer, 一个menu 和一个body搭建起来的。

                         <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-9-281459060.gif

每一个Tilesheader, menu, body, ...)都是一个JSP页面,它们也可以通过组合其他的Tiles来搭建。

应用Tiles就好比是应用Java的方法:需要你定义Tiles(方法体),然后你才能够在任何你需要的地方“调用”该方法体,并传递一些参数。在Tiles中,为了避免与request参数相混淆,参数(parameters)被称为属性(attributes)。

Tiles的方法体(也可以说是内容——译者注)可以是一个简单的JSP页面,   或者是一个Struts的动作(action),或者任何一个指向现存的网页资源的URI

插入或者调用Tiles可以通过在JSP中的任何位置置入如下tag来完成:<tiles:insert ...>。插入也可以通过下面的方法来完成:指定一个作为Struts forward的路径的自定义名;或者指定一个作为Struts actioninputforward或者include属性的自定义名。

Tiles的方法体是用来创建版面布局,可复用部分等的,而Tiles的插入操作是用来插入Tiles的。同一个Tiles可以在同一个站点甚至同一个页面被重用多次。

Tiles的插入可以与一个在Tiles中称作“definition”的逻辑名联系起来。一个Tilesdefinition包含一个逻辑名,一个主体页面和一些属性值。definition的声明并不插入与其相关联的Tiles方法体,它只是让Tiles与它的逻辑名关联起来。可以在任何能够插入Tiles地方运用定义的逻辑名,这样与其对应的Tiles及其属性就被插入进来了。

Tilesdefinition的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。Definition可以继承于另外一个Tilesdefinition,重载一些属性,添加一些新的属性等等。这就允许“父类”的definition定义一些通用的layout, header, menu, footer. 所有其他继承于该父类的definition可以简单地通过改变其definition来改变整个页面。

 

2.简单的例子

 

1)插入到JSP页面中:

 

 

这个例子将tag中指定的页面插入到整个页面中来。page属性可以是指向任何现存网络资源有效的URL

 

2)插入一个Tiles同时传递属性值:

 

 

这个例子插入了指定的页面,同时传递了它的属性值。属性值存储在Tilescontext中,这个context也被传递到插入的tag中,然后可以用它们的名字进行访问。

 

3)作为String来得到一个属性

 

<tiles:getAsString name="title" />

 

这个例子得到 ”tilte” 属性的值,并在当前输出流中把它作为字符串打印出来。toString() 方法应用于该属性值,允许作为值来传递任何对象。

 

4)通过引用属性来插入Tiles

 

 

该例子插入了被 “menu” 属性值引用的Tiles。当前的Tilescontext首先获得该属性值,然后它再用来作为页面目标而插入。

 

5)典型的页面布局

这个例子是典型的header-footer-menu-body 组合而成的页面布局。

 

该布局可以在一个JSP页面中声明(比如:/layouts/classicLayout.jsp)。它可以与在例子(2)中描述的tag一起结合运用。

 

3.Tiles的定义(Definitions)

 

Tilesdefinition包含一个带有Tiles URL的逻辑名和一些属性值。定义并不插入Tiles。插入是在后来用definition的名字来完成的。一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。

Tilesdefinition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。比如,你可以定义一个“父类”的definition同时定义主要的 header, menu, footer, 和一个默认的 title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载titlebody属性。

Tilesdefinitions的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。为了使中心控制文件中定义的definitions有效,你需要初始化“定义池”(definitions factory),这个定义池能够解释文件中的definitions并把它们提供给Tiles框架。

 

4.使定义池生效

 

为了使在文件中定义的Tiles definitions生效,你需要写下这些文件并初始化定义池。

初始化根据你是否应用Struts或者所用的Struts版本的不同而不同(这里只介绍了Struts1.1版本的配置)。

 

Struts1.1

 

应用Tiles的插件(plug-in)使Tiles definition生效。该插件创建定义池并把它传递给带有参数的配置对象。参数可以在web.xml文件中配置,也可以作为插件的参数来配置。插件首先从web.xml中读取参数,然后,重载那些在插件中也配置了的参数。所有的参数都是可选的,也可以忽略它们。插件应该在每一个struts-config.xml文件中声明:

 

l         definitions-config:(可选)

指定配置文件的名称。可以有多个文件名,之间用逗号隔开。

l         definitions-parser-validate:(可选)

指定XML解释器是否验证Tiles的配置文件。

true::验证。DTD应该在文件开头指定(默认情况)

false:不验证。

l         moduleAware:(可选)

指定Tiles的定义池是否已模块对应化。如果是true(默认),对应每一个Struts模块都有一个定义池。如果是false,就会有一个为所有模块共用的定义池。对应后者,仍然需要每一个模块都对应定义一个plug-in插件。定义池将要以在第一个plug-in插件(一般是与默认的模块相关联的那个插件)中发现的参数值来初始化定义池。

trueTiles框架是模块对应。

falseTiles框架在所有的模块中只有一个共用的定义池(默认)。

l         tilesUtilImplClassname:(可选——高级用户使用)

指定所用的TilesUtil的实现的类名。指定的类应该是TilesUtilStrutsImpl类的子类。这一项使moduleAware选项失效。

指定 "TilesUtilStrutsImpl"相当于moduleAware = false

指定 "TilesUtilStrutsModuleImpl" 相当于moduleAware = true.

当首次遇到这一项时,它被执行,并且只被执行一次。为了避免出现问题,建议在所有的TilesPlugin声明中都用相同的值。

 

TilesPlugin类为每一个Struts模块创建了一个定义池。

 

如果moduleAware处于false状态,那么就为所有的模块创建一个共用的定义池。对于后者来说,定义池就会以在第一个plugin中发现的参数来初始化。在每一个模块中应该声明对应的plugin,并且在整个应用程序当中,moduleAware都应该处于同一状态。

 

Tiles中的路径都是相对于main context来说的。

你不必指定具体的TilesRequestProcessorplug-in会自动处理,然而,你想指定你自己的RequestProcessor,那么它应该继承自TilesRequestProcessorplug-in会检查这项约束。

 

5.定义文件的语法

 

定义文件的语法可以在tiles-config_1_1.dtd文件中找到。

下面是一个简单的例子:

 

 

 

 

 

 

 

 

6.调试 (Debugging)

 

若想调试由Tiles组建的页面,可以遵循下面的建议:

 

l         独立的检查每一个Tiles。直接访问那些嵌套的Tiles来测试它们是否运行正常。

Tiles日志生效,详情请查阅commons-logging包的帮助文件。

struts系列学习(tiles标签库二)

Tiles的使用(二)- -                                       Tiles定义          我们需要一种方法,在一个单独的可复用文件中定义所有的attr...
  • reallyafei
  • reallyafei
  • 2007年02月03日 00:20
  • 2056

Struts中Tiles标签简介

Tiles简介XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />我发现在看到的这些关于Tiles的文档...
  • SmartTony
  • SmartTony
  • 2007年09月04日 11:42
  • 828

Struts Tiles框架,标签库详解<tiles:insert page="facebook.jsp" />

Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。它允许先创建模板,然后在运行时动态地将内容插入到模板中。Tiles 框架建立在JSP的include指令的基础上,但它提供...
  • sun375867463
  • sun375867463
  • 2014年06月12日 00:28
  • 2004

Struts2 中的Tiles框架的使用

以前使用过Struts2的Tiles布局,但是
  • yezis
  • yezis
  • 2014年06月14日 23:19
  • 2008

Struts Tiles框架使用

Tiles框架                                          ++YONG原创,转载请声明Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分...
  • qjyong
  • qjyong
  • 2007年08月01日 16:27
  • 11357

Spring MVC集成Struts Tiles使用方法

首先,我们定义一个总体的tiles视图 /tiles/mainTemplate.jsp首先使用:打印tiles配置文件中定义的字符串属性title然后是分别加载header,content,foote...
  • daryl715
  • daryl715
  • 2007年06月27日 12:06
  • 2739

tiles3 + struts2 + spring3配置

tiles3 + struts2 + spring3配置
  • huanglgln
  • huanglgln
  • 2015年01月06日 11:09
  • 2241

Struts Tiles标签

Struts Tiles标签:main.jsp:"text/html; charset=UTF-8" %>"strutsTiles" prefix="tiles" %>"layout.jsp" flu...
  • wslyy99
  • wslyy99
  • 2008年12月10日 14:26
  • 300

Struts的tiles标签

下面开始讲解tiles标签,那么先引用2个问题,什么是tiles标签,tiles标签有什么用?什么是tiles标签:tiles标签是建立在JSP的include的基础之上的一组标签。tiles标签的作...
  • liaomin416100569
  • liaomin416100569
  • 2011年02月22日 15:54
  • 498

struts的tiles标签

1)tiles-defs.xml模板的定义                    
  • highwhite2009
  • highwhite2009
  • 2011年01月06日 15:55
  • 314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts中Tiles标签简介
举报原因:
原因补充:

(最多只允许输入30个字)