Struts2 中的Tiles框架的使用

以前使用过Struts2的Tiles布局,但是时间久了,就忘得差不多了,今天做项目要用起来,找了别人的一些资料才想起来,趁着这个机会吧自己的想法记录下来,免得下回忘记还要四处找资料,自己写的再不好也是自己的东西,要是看别人写的再好也会耽误点时间。

Tiles布局,顾名思义,页面布局用的,可以让页面重复利用,目前已经与struts2融合,所以使用还是很方便的。

首先,在项目导入Struts2的支持时要选择导入Tiles的架包


导入完成之后要在web.xml文件中声明Tiles被使用

<!-- 配置tiles布局 -->
  <listener>
  	<listener-class>
  		org.apache.struts2.tiles.StrutsTilesListener
  	</listener-class>
  </listener>
之后,我们要根据自己的项目需要分析一下页面结构:



在上图中,页面被红色线(画的有点不直哦)分为三个部分,分别是头部、侧面和正文,所以我们需要三个jsp页面分别编写这三个部分的内容,之后还需要一个布局页面,因为,我们要把这三个页面放在一起,所以要创建一个布局页面,方便页面的布局以及以后请求页面,我们创建如下四个jsp页面:articlesGroup.jsp,head.jsp,sidebar.jsp,layout.jsp,分别代表,正文,头部,侧面,布局页面,根据结构需要,我们编写tiles.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

<tiles-definitions>
	<definition name="articlesGroupTiles" template="/WEB-INF/articlesGroup/layout.jsp">
		<put-attribute name="HEADER" value="/WEB-INF/articlesGroup/head.jsp"></put-attribute>
		<put-attribute name="SIDEBAR" value="/WEB-INF/articlesGroup/sidebar.jsp"></put-attribute>
		<put-attribute name="CONTENT" value="/WEB-INF/articlesGroup/articlesGroup.jsp"></put-attribute>
	</definition>
</tiles-definitions>

因为,为了安全起见,不让用户浏览到我们的某个布局文件,比如head.jsp,所以,我们在WEB-INF文件夹下创建articlesGroup文件夹,把布局文件放入,因为浏览器是不能访问WEB-INF下的内容,但是我们可以链接过去,进而保证了布局文件的安全性。

这个tiles.xml文件很好理解,没有什么台细说的,但是要注意definition与put-attribute标签的name属性,以后需要用到,用接下来说。

tiles.xml文件写完,我们就要完成所有的jsp文件了,head.jsp,sidebar.jsp,layout.jsp这个三个没什么好说的,内容和平时的jsp一样,layout.jsp有一点小小的不同,首先我们要导入tiles标签的支持

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
之后,编写页面:

<td height="100%" valign="top"><div class="windowsContent-Panel"> 
          <tiles:insertAttribute name="HEADER"/>
          <table width="100%" height="100%" cellspacing="0" cellpadding="0" border="0">
            <tbody>
              <tr>
                <td id="windowsContent-leftPanel" class="windowsContent-leftPanel" valign="top" style="height: 716px;">
                <tiles:insertAttribute name="SIDEBAR"/>
                </td>
                <td id="windowsContent-rightPanel" class="windowsContent-rightPanel" valign="top" width="1261px">
                <tiles:insertAttribute name="CONTENT"/>
                </td>
              </tr>
            </tbody>
          </table>
        </div></td>
看到了吧,这里面有一个tiles:insertArribute 的标签,其中有一个name属性,这个属性就是你的tiles.xml文件put-attribute标签的name属性的值,你要引入哪个布局文件就写上那个布局文件的put-attribute name属性值。

现在,写完了所有的jsp文件,有两个细节问题,第一js,css文件的引用,这两个文件的引用只在布局jsp文件,也就是上面的layout.jsp中引用一次就可以了,因为这些jsp文件时要在浏览器加载以前合并在以前的,第二,js,css,图片的引用路径问题,我的项目结构如下图:


我在jsp中引用路径都是js/xxx.js或者css/xxx.css或者image/xxx.png。

完成了一切的页面内容之后,我们就可以请求访问了,因为是Struts2下,所以要使用Action区请求访问,编写struts.xml也有所不一样:

<package name="articles" namespace="/" extends="tiles-default">
		<action name="articlesGroup">
			<result type="tiles">articlesGroupTiles</result>
		</action>
</package>
第一,package标签要继承tiles-default,不用担心这个包不能写正常的action,因为tiles-default继承了struts-default

第二,action result返回类型要是tiles的,并且访问的东西是tiles.xml中的definition标签的name属性的值。

这样我们就可以通过访问articlesGroup.action区访问整个页面了。


最后一个问题,关于页面的复用:

上面说了一堆都是基本的用法,如果那三个布局页面没有多次复用,使用Tiles就是多此一举,那么,怎么复用页面呢?

比如说,还是上面的三个页面,我点击一个链接,链接到的页面内容头部,侧面是一样的,仅仅是主要部分是不同的,这是就需要用到复用了,

我们先创建另一个主要页面articlesList.jsp,之后修改一些tile.xml文件:

<tiles-definitions>
	<definition name="articlesGroupTiles" template="/WEB-INF/articlesGroup/layout.jsp">
		<put-attribute name="HEADER" value="/WEB-INF/articlesGroup/head.jsp"></put-attribute>
		<put-attribute name="SIDEBAR" value="/WEB-INF/articlesGroup/sidebar.jsp"></put-attribute>
		<put-attribute name="CONTENT" value="/WEB-INF/articlesGroup/articlesGroup.jsp"></put-attribute>
	</definition>
	<definition name="addarticlesGroupTiles" extends="articlesGroupTiles">
		<put-attribute name="CONTENT" value="/WEB-INF/articlesGroup/articlesList.jsp"></put-attribute>
	</definition>
</tiles-definitions>
请看第二个definition标签,它继承articlesGroupTlies,也就是第一个definition标签,但是它只加了一个put-attribute标签重写了上面name为CONTENT的标签,也就是说,我们仅仅替换主要页面,但是其他页面(头部页面,侧面页面)我们都复用,这样,就体现了Tiles布局的优点,页面的复用,余下的请求访问方法都是一样的了。


最后,如果你想仅仅是局部刷新页面的话,最好还是用Ajax吧,目前为止,在Tiles中我没有找到局部刷新的实现方式

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值