Struts中Title标签简介
2009-10-12 09:15
239 查看
1.简介
Tiles框架可以令我们组合可以复用的Tiles来搭建网页。例如,下图中的页面就是通过组合一个header,一个footer,一个menu和一个body搭建起来的。
每一个Tiles(header,menu,body,...)都是一个JSP页面,它们也可以通过组合其他的Tiles来搭建。
应用Tiles就好比是应用Java的方法:需要你定义Tiles(方法体),然后你才能够在任何你需要的地方“调用”该方法体,并传递一些参数。在Tiles中,为了避免与request参数相混淆,参数(parameters)被称为属性(attributes)。
Tiles的方法体(也可以说是内容——译者注)可以是一个简单的JSP页面,或者是一个Struts的动作(action),或者任何一个指向现存的网页资源的URI。
插入或者调用Tiles可以通过在JSP中的任何位置置入如下tag来完成:<tiles:insert...>。插入也可以通过下面的方法来完成:指定一个作为Strutsforward的路径的自定义名;或者指定一个作为Strutsaction的input,forward或者include属性的自定义名。
Tiles的方法体是用来创建版面布局,可复用部分等的,而Tiles的插入操作是用来插入Tiles的。同一个Tiles可以在同一个站点甚至同一个页面被重用多次。
Tiles的插入可以与一个在Tiles中称作“definition”的逻辑名联系起来。一个Tiles的definition包含一个逻辑名,一个主体页面和一些属性值。definition的声明并不插入与其相关联的Tiles方法体,它只是让Tiles与它的逻辑名关联起来。可以在任何能够插入Tiles地方运用定义的逻辑名,这样与其对应的Tiles及其属性就被插入进来了。
Tiles的definition的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。Definition可以继承于另外一个Tiles的definition,重载一些属性,添加一些新的属性等等。这就允许“父类”的definition定义一些通用的layout,header,menu,footer.所有其他继承于该父类的definition可以简单地通过改变其definition来改变整个页面。
2.简单的例子
(1)插入到JSP页面中:
这个例子将tag中指定的页面插入到整个页面中来。page属性可以是指向任何现存网络资源有效的URL。
(2)插入一个Tiles同时传递属性值:
(说明:将classicLayout.jsp页面插入到当前页面中,在classicLayout.jsp中分别定义了
<title><tiles:getAsStringname="title"/></title>注释:表示classicLayout.jsp中在此处引用了“PageTitle”字符串作为header
<titles:insertattribute="header"/>注释:表示classicLayout.jsp中在此处引用了common/header.jsp作为header
<titles:insertattribute="footer"/>注释:表示classicLayout.jsp中在此处引用了common/footer.jsp作为footer
<titles:insertattribute="menu"/>注释:表示classicLayout.jsp中在此处引用了common/header.jsp作为header
<titles:insertattribute="body"/>注释:表示classicLayout.jsp中在此处引用了common/body.jsp作为body)
这个例子插入了指定的页面,同时传递了它的属性值。属性值存储在Tiles的context中,这个context也被传递到插入的tag中,然后可以用它们的名字进行访问。
(3)作为String来得到一个属性
<tiles:getAsStringname="title"/>
这个例子得到”tilte”属性的值,并在当前输出流中把它作为字符串打印出来。toString()方法应用于该属性值,允许作为值来传递任何对象。
(4)通过引用属性来插入Tiles
该例子插入了被“menu”属性值引用的Tiles。当前的Tiles的context首先获得该属性值,然后它再用来作为页面目标而插入。
(5)典型的页面布局
这个例子是典型的header-footer-menu-body组合而成的页面布局。
该布局可以在一个JSP页面中声明(比如:/layouts/classicLayout.jsp)。它可以与在例子(2)中描述的tag一起结合运用。
3.Tiles的定义(Definitions)
Tiles的definition包含一个带有TilesURL的逻辑名和一些属性值。定义并不插入Tiles。插入是在后来用definition的名字来完成的。一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。
Tiles的definition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。比如,你可以定义一个“父类”的definition同时定义主要的header,menu,footer,和一个默认的title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载title和body属性。
Tiles的definitions的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。为了使中心控制文件中定义的definitions有效,你需要初始化“定义池”(definitionsfactory),这个定义池能够解释文件中的definitions并把它们提供给Tiles框架。
4.使定义池生效
为了使在文件中定义的Tilesdefinitions生效,你需要写下这些文件并初始化定义池。
初始化根据你是否应用Struts或者所用的Struts版本的不同而不同(这里只介绍了Struts1.1版本的配置)。
Struts1.1
应用Tiles的插件(plug-in)使Tilesdefinition生效。该插件创建定义池并把它传递给带有参数的配置对象。参数可以在web.xml文件中配置,也可以作为插件的参数来配置。插件首先从web.xml中读取参数,然后,重载那些在插件中也配置了的参数。所有的参数都是可选的,也可以忽略它们。插件应该在每一个struts-config.xml文件中声明:
ldefinitions-config:(可选)
指定配置文件的名称。可以有多个文件名,之间用逗号隔开。
ldefinitions-parser-validate:(可选)
指定XML解释器是否验证Tiles的配置文件。
true::验证。DTD应该在文件开头指定(默认情况)
false:不验证。
lmoduleAware:(可选)
指定Tiles的定义池是否已模块对应化。如果是true(默认),对应每一个Struts模块都有一个定义池。如果是false,就会有一个为所有模块共用的定义池。对应后者,仍然需要每一个模块都对应定义一个plug-in插件。定义池将要以在第一个plug-in插件(一般是与默认的模块相关联的那个插件)中发现的参数值来初始化定义池。
true:Tiles框架是模块对应。
false:Tiles框架在所有的模块中只有一个共用的定义池(默认)。
ltilesUtilImplClassname:(可选——高级用户使用)
指定所用的TilesUtil的实现的类名。指定的类应该是TilesUtilStrutsImpl类的子类。这一项使moduleAware选项失效。
指定"TilesUtilStrutsImpl"相当于moduleAware=false。
指定"TilesUtilStrutsModuleImpl"相当于moduleAware=true.
当首次遇到这一项时,它被执行,并且只被执行一次。为了避免出现问题,建议在所有的TilesPlugin声明中都用相同的值。
TilesPlugin类为每一个Struts模块创建了一个定义池。
如果moduleAware处于false状态,那么就为所有的模块创建一个共用的定义池。对于后者来说,定义池就会以在第一个plugin中发现的参数来初始化。在每一个模块中应该声明对应的plugin,并且在整个应用程序当中,moduleAware都应该处于同一状态。
Tiles中的路径都是相对于maincontext来说的。
你不必指定具体的TilesRequestProcessor,plug-in会自动处理,然而,你想指定你自己的RequestProcessor,那么它应该继承自TilesRequestProcessor。plug-in会检查这项约束。
5.定义文件的语法
定义文件的语法可以在tiles-config_1_1.dtd文件中找到。
下面是一个简单的例子:
6.调试(Debugging)
若想调试由Tiles组建的页面,可以遵循下面的建议:
l独立的检查每一个Tiles。直接访问那些嵌套的Tiles来测试它们是否运行正常。
是Tiles日志生效,详情请查阅commons-logging包的帮助文件。
Tiles框架可以令我们组合可以复用的Tiles来搭建网页。例如,下图中的页面就是通过组合一个header,一个footer,一个menu和一个body搭建起来的。
每一个Tiles(header,menu,body,...)都是一个JSP页面,它们也可以通过组合其他的Tiles来搭建。
应用Tiles就好比是应用Java的方法:需要你定义Tiles(方法体),然后你才能够在任何你需要的地方“调用”该方法体,并传递一些参数。在Tiles中,为了避免与request参数相混淆,参数(parameters)被称为属性(attributes)。
Tiles的方法体(也可以说是内容——译者注)可以是一个简单的JSP页面,或者是一个Struts的动作(action),或者任何一个指向现存的网页资源的URI。
插入或者调用Tiles可以通过在JSP中的任何位置置入如下tag来完成:<tiles:insert...>。插入也可以通过下面的方法来完成:指定一个作为Strutsforward的路径的自定义名;或者指定一个作为Strutsaction的input,forward或者include属性的自定义名。
Tiles的方法体是用来创建版面布局,可复用部分等的,而Tiles的插入操作是用来插入Tiles的。同一个Tiles可以在同一个站点甚至同一个页面被重用多次。
Tiles的插入可以与一个在Tiles中称作“definition”的逻辑名联系起来。一个Tiles的definition包含一个逻辑名,一个主体页面和一些属性值。definition的声明并不插入与其相关联的Tiles方法体,它只是让Tiles与它的逻辑名关联起来。可以在任何能够插入Tiles地方运用定义的逻辑名,这样与其对应的Tiles及其属性就被插入进来了。
Tiles的definition的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。Definition可以继承于另外一个Tiles的definition,重载一些属性,添加一些新的属性等等。这就允许“父类”的definition定义一些通用的layout,header,menu,footer.所有其他继承于该父类的definition可以简单地通过改变其definition来改变整个页面。
2.简单的例子
(1)插入到JSP页面中:
<tiles:insertpage="/layouts/commonLayout.jsp"flush="true"/>
这个例子将tag中指定的页面插入到整个页面中来。page属性可以是指向任何现存网络资源有效的URL。
(2)插入一个Tiles同时传递属性值:
<tiles:insertpage="/layouts/classicLayout.jsp"flush="true">
<tiles:putname="title"value="PageTitle"/>
<tiles:putname="header"value="/common/header.jsp"/>
<tiles:putname="footer"value="/common/footer.jsp"/>
<tiles:putname="menu"value="/common/menu.jsp"/>
<tiles:putname="body"value="/tiles/mainBody.jsp"/>
</tiles:insert>
(说明:将classicLayout.jsp页面插入到当前页面中,在classicLayout.jsp中分别定义了
<title><tiles:getAsStringname="title"/></title>注释:表示classicLayout.jsp中在此处引用了“PageTitle”字符串作为header
<titles:insertattribute="header"/>注释:表示classicLayout.jsp中在此处引用了common/header.jsp作为header
<titles:insertattribute="footer"/>注释:表示classicLayout.jsp中在此处引用了common/footer.jsp作为footer
<titles:insertattribute="menu"/>注释:表示classicLayout.jsp中在此处引用了common/header.jsp作为header
<titles:insertattribute="body"/>注释:表示classicLayout.jsp中在此处引用了common/body.jsp作为body)
这个例子插入了指定的页面,同时传递了它的属性值。属性值存储在Tiles的context中,这个context也被传递到插入的tag中,然后可以用它们的名字进行访问。
(3)作为String来得到一个属性
<tiles:getAsStringname="title"/>
这个例子得到”tilte”属性的值,并在当前输出流中把它作为字符串打印出来。toString()方法应用于该属性值,允许作为值来传递任何对象。
(4)通过引用属性来插入Tiles
<tiles:insertattribute='menu'/>
该例子插入了被“menu”属性值引用的Tiles。当前的Tiles的context首先获得该属性值,然后它再用来作为页面目标而插入。
(5)典型的页面布局
这个例子是典型的header-footer-menu-body组合而成的页面布局。
<tr>
<tdcolspan="2"><tiles:insertattribute="header"/></td>
</tr>
<tr>
<tdwidth="140"valign="top">
<tiles:insertattribute='menu'/>
</td>
<tdvalign="top"align="left">
<tiles:insertattribute='body'/>
</td>
</tr>
<tr>
<tdcolspan="2">
<tiles:insertattribute="footer"/>
</td>
</tr>
</table>
</body>
</html>
该布局可以在一个JSP页面中声明(比如:/layouts/classicLayout.jsp)。它可以与在例子(2)中描述的tag一起结合运用。
3.Tiles的定义(Definitions)
Tiles的definition包含一个带有TilesURL的逻辑名和一些属性值。定义并不插入Tiles。插入是在后来用definition的名字来完成的。一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。
Tiles的definition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。比如,你可以定义一个“父类”的definition同时定义主要的header,menu,footer,和一个默认的title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载title和body属性。
Tiles的definitions的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。为了使中心控制文件中定义的definitions有效,你需要初始化“定义池”(definitionsfactory),这个定义池能够解释文件中的definitions并把它们提供给Tiles框架。
4.使定义池生效
为了使在文件中定义的Tilesdefinitions生效,你需要写下这些文件并初始化定义池。
初始化根据你是否应用Struts或者所用的Struts版本的不同而不同(这里只介绍了Struts1.1版本的配置)。
Struts1.1
应用Tiles的插件(plug-in)使Tilesdefinition生效。该插件创建定义池并把它传递给带有参数的配置对象。参数可以在web.xml文件中配置,也可以作为插件的参数来配置。插件首先从web.xml中读取参数,然后,重载那些在插件中也配置了的参数。所有的参数都是可选的,也可以忽略它们。插件应该在每一个struts-config.xml文件中声明:
<plug-inclassName="org.apache.struts.tiles.TilesPlugin">
<set-propertyproperty="definitions-config"
value="/WEB-INF/tiles-defs.xml,
/WEB-INF/tiles-tests-defs.xml,/WEB-INF/tiles-tutorial-defs.xml,
/WEB-INF/tiles-examples-defs.xml"/>
<set-propertyproperty="moduleAware"value="true"/>
<set-propertyproperty="definitions-parser-validate"value="true"/>
</plug-in>
ldefinitions-config:(可选)
指定配置文件的名称。可以有多个文件名,之间用逗号隔开。
ldefinitions-parser-validate:(可选)
指定XML解释器是否验证Tiles的配置文件。
true::验证。DTD应该在文件开头指定(默认情况)
false:不验证。
lmoduleAware:(可选)
指定Tiles的定义池是否已模块对应化。如果是true(默认),对应每一个Struts模块都有一个定义池。如果是false,就会有一个为所有模块共用的定义池。对应后者,仍然需要每一个模块都对应定义一个plug-in插件。定义池将要以在第一个plug-in插件(一般是与默认的模块相关联的那个插件)中发现的参数值来初始化定义池。
true:Tiles框架是模块对应。
false:Tiles框架在所有的模块中只有一个共用的定义池(默认)。
ltilesUtilImplClassname:(可选——高级用户使用)
指定所用的TilesUtil的实现的类名。指定的类应该是TilesUtilStrutsImpl类的子类。这一项使moduleAware选项失效。
指定"TilesUtilStrutsImpl"相当于moduleAware=false。
指定"TilesUtilStrutsModuleImpl"相当于moduleAware=true.
当首次遇到这一项时,它被执行,并且只被执行一次。为了避免出现问题,建议在所有的TilesPlugin声明中都用相同的值。
TilesPlugin类为每一个Struts模块创建了一个定义池。
如果moduleAware处于false状态,那么就为所有的模块创建一个共用的定义池。对于后者来说,定义池就会以在第一个plugin中发现的参数来初始化。在每一个模块中应该声明对应的plugin,并且在整个应用程序当中,moduleAware都应该处于同一状态。
Tiles中的路径都是相对于maincontext来说的。
你不必指定具体的TilesRequestProcessor,plug-in会自动处理,然而,你想指定你自己的RequestProcessor,那么它应该继承自TilesRequestProcessor。plug-in会检查这项约束。
5.定义文件的语法
定义文件的语法可以在
下面是一个简单的例子:
<!DOCTYPEtiles-definitionsPUBLIC
"-//ApacheSoftwareFoundation//DTDTilesConfiguration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<!--DefinitionsforTilesdocumentation-->
<tiles-definitions>
<!--==========================================================-->
<!--Masterdefinition-->
<!--==========================================================-->
<!--Mainpagelayoutusedasarootforotherpagedefinitions-->
<definitionname="site.mainLayout"path="/layouts/classicLayout.jsp">
<putname="title"value="TilesBlankSite"/>
<putname="header"value="/tiles/common/header.jsp"/>
<putname="menu"value="site.menu.bar"/>
<putname="footer"value="/tiles/common/footer.jsp"/>
<putname="body"value="/tiles/body.jsp"/>
</definition>
<!--==========================================================-->
<!--Indexpagedefinition-->
<!--==========================================================-->
<!--Thisdefinitioninheritsfromthemaindefinition.
Itoverloadsthepagetitleandthebodyused.
Usethesamemechanismtodefinenewpagessharingcommon
properties(hereheader,menu,footer,layout)
-->
<definitionname="site.index.page"extends="site.mainLayout">
<putname="title"value="TilesBlankSiteIndex"/>
<putname="body"value="/tiles/body.jsp"/>
</definition>
</tiles-definition>
6.调试(Debugging)
若想调试由Tiles组建的页面,可以遵循下面的建议:
l独立的检查每一个Tiles。直接访问那些嵌套的Tiles来测试它们是否运行正常。
是Tiles日志生效,详情请查阅commons-logging包的帮助文件。
相关文章推荐
- struts 2.0标签库简介
- struts2.0的标签库(简介)
- struts2.0的标签库(简介)
- Struts中Tiles标签简介
- Struts中Tiles标签简介
- struts2.0的标签库(简介)
- 引用 struts2.0的标签库(简介)
- struts2.0的标签库(简介)
- 在JS里面,取struts的<html:form>标签里面的<html:text property="title"/>值
- struts2.0的标签库(简介)
- Struts中Tiles标签简介
- 在JS里面,取struts的<html:form>标签里面的<html:text property="title"/>值
- struts2.0的标签库(简介)
- struts2.0的标签库(简介)
- struts2.0的标签库(简介)
- Struts中使用Tiles标签后,title的国际化
- struts2.0标签技术简介
- struts 标签简介
- struts标签select加title属性
- Struts2.0的标签库(简介)