Struts中Tiles标签简介

2024-01-07 14:38
文章标签 标签 简介 struts tiles

本文主要是介绍Struts中Tiles标签简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


 
    1.简介
 
Tiles框架可以令我们组合可以复用的Tiles来搭建网页。例如,下图中的页面就是通过组合一个header, 一个footer, 一个menu 和一个body搭建起来的。
                         ASPectratio="t" v:ext="edit">
每一个Tiles(header, menu, body, ...)都是一个JSP页面,它们也可以通过组合其他的Tiles来搭建。
应用Tiles就好比是应用Java的方法:需要你定义Tiles(方法体),然后你才能够在任何你需要的地方“调用”该方法体,并传递一些参数。在Tiles中,为了避免与request参数相混淆,参数(parameters)被称为属性(attributes)。
Tiles的方法体(也可以说是内容——译者注)可以是一个简单的JSP页面,   或者是一个Struts的动作(action),或者任何一个指向现存的网页资源的URI。
插入或者调用Tiles可以通过在JSP中的任何位置置入如下tag来完成:<tiles:insert ...>。插入也可以通过下面的方法来完成:指定一个作为Struts forward的路径的自定义名;或者指定一个作为Struts action的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:insert page="/layouts/commonLayout.jsp" flush="true" /> 这个例子将tag中指定的页面插入到整个页面中来。page属性可以是指向任何现存网络资源有效的URL。
 
(2)插入一个Tiles同时传递属性值:
 
<tiles:insert page="/layouts/classicLayout.jsp" flush="true">       <tiles:put name="title" value="Page Title" />       <tiles:put name="header" value="/common/header.jsp" />       <tiles:put name="footer" value="/common/footer.jsp" />        <tiles:put name="menu"   value="/common/menu.jsp" />       <tiles:put name="body"   value="/tiles/mainBody.jsp" /></tiles:insert>
这个例子插入了指定的页面,同时传递了它的属性值。属性值存储在Tiles的context中,这个context也被传递到插入的tag中,然后可以用它们的名字进行访问。
 
(3)作为String来得到一个属性
 
<tiles:getAsString name="title" />
 
这个例子得到 ”tilte” 属性的值,并在当前输出流中把它作为字符串打印出来。toString() 方法应用于该属性值,允许作为值来传递任何对象。
 
(4)通过引用属性来插入Tiles
 
<tiles:insert attribute='menu' />
该例子插入了被 “menu” 属性值引用的Tiles。当前的Tiles的context首先获得该属性值,然后它再用来作为页面目标而插入。
 
(5)典型的页面布局
这个例子是典型的header-footer-menu-body 组合而成的页面布局。
 
<tr> <td colspan="2"><tiles:insert attribute="header" /></td></tr><tr> <td width="140" valign="top">    <tiles:insert attribute='menu' /> </td> <td valign="top" align="left">    <tiles:insert attribute='body' /> </td></tr><tr> <td colspan="2">    <tiles:insert attribute="footer" /> </td></tr></table></body></html>该布局可以在一个JSP页面中声明(比如:/layouts/classicLayout.jsp)。它可以与在例子(2)中描述的tag一起结合运用。
 
3.Tiles的定义(Definitions)
 
Tiles的definition包含一个带有Tiles URL的逻辑名和一些属性值。定义并不插入Tiles。插入是在后来用definition的名字来完成的。一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。
Tiles的definition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。比如,你可以定义一个“父类”的definition同时定义主要的 header, menu, footer, 和一个默认的 title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载title和body属性。
Tiles的definitions的定义可以在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文件中声明:
 
<plug-in className="org.apache.struts.tiles.TilesPlugin" >    <set-property property="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-property property="moduleAware" value="true" />    <set-property property="definitions-parser-validate" value="true" /> </plug-in>l         definitions-config:(可选)
指定配置文件的名称。可以有多个文件名,之间用逗号隔开。
l         definitions-parser-validate:(可选)
指定XML解释器是否验证Tiles的配置文件。
true::验证。DTD应该在文件开头指定(默认情况)
false:不验证。
l         moduleAware:(可选)
指定Tiles的定义池是否已模块对应化。如果是true(默认),对应每一个Struts模块都有一个定义池。如果是false,就会有一个为所有模块共用的定义池。对应后者,仍然需要每一个模块都对应定义一个plug-in插件。定义池将要以在第一个plug-in插件(一般是与默认的模块相关联的那个插件)中发现的参数值来初始化定义池。
true:Tiles框架是模块对应。
false:Tiles框架在所有的模块中只有一个共用的定义池(默认)。
l         tilesUtilImplClassname:(可选——高级用户使用)
指定所用的TilesUtil的实现的类名。指定的类应该是TilesUtilStrutsImpl类的子类。这一项使moduleAware选项失效。
指定 "TilesUtilStrutsImpl"相当于moduleAware = false。
指定 "TilesUtilStrutsModuleImpl" 相当于moduleAware = true.
当首次遇到这一项时,它被执行,并且只被执行一次。为了避免出现问题,建议在所有的TilesPlugin声明中都用相同的值。
 
TilesPlugin类为每一个Struts模块创建了一个定义池。
 
如果moduleAware处于false状态,那么就为所有的模块创建一个共用的定义池。对于后者来说,定义池就会以在第一个plugin中发现的参数来初始化。在每一个模块中应该声明对应的plugin,并且在整个应用程序当中,moduleAware都应该处于同一状态。
 
Tiles中的路径都是相对于main context来说的。
你不必指定具体的TilesRequestProcessor,plug-in会自动处理,然而,你想指定你自己的RequestProcessor,那么它应该继承自TilesRequestProcessor。plug-in会检查这项约束。
 
5.定义文件的语法
 
定义文件的语法可以在tiles-config_1_1.dtd文件中找到。
下面是一个简单的例子:
 <!DOCTYPE tiles-definitions PUBLIC       "-//Apache Software Foundation//DTD Tiles Configuration//EN"       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <!-- Definitions for Tiles documentation   --><tiles-definitions>  <!-- ========================================================== --> <!-- Master definition                                          -->  <!-- ========================================================== --> <!-- Main page layout used as a root for other page definitions -->  <definition name="site.mainLayout" path="/layouts/classicLayout.jsp">          <put name="title" value="Tiles Blank Site" />          <put name="header" value="/tiles/common/header.jsp" />          <put name="menu"   value="site.menu.bar" />          <put name="footer" value="/tiles/common/footer.jsp" />          <put name="body"   value="/tiles/body.jsp" /> </definition>  <!-- ========================================================== --> <!-- Index page definition                                      --> <!-- ========================================================== -->    <!-- This definition inherits from the main definition.          It overloads the page title and the body used.          Use the same mechanism to define new pages sharing common            properties (here header, menu, footer, layout)         -->  <definition name="site.index.page" extends="site.mainLayout" >          <put name="title" value="Tiles Blank Site Index" />          <put name="body"   value="/tiles/body.jsp" /> </definition> </tiles-definition>
6.调试 (Debugging)
 
若想调试由Tiles组建的页面,可以遵循下面的建议:
 
l         独立的检查每一个Tiles。直接访问那些嵌套的Tiles来测试它们是否运行正常。
是Tiles日志生效,详情请查阅commons-logging包的帮助文件。 

这篇关于Struts中Tiles标签简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580240

相关文章

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些