struts2 整合tiles 入门

下面开始正式阐述如果整合struts2 和 tiles 1.

在struts2整合完成的前提下位tiles单独准备如下各jar包,注意各jar包的版本要一致。

通常我们到你用来搭建struts环境的lib目录下寻找这些jar包,如果你下载的是struts2.0,则到她的lib下面找;

这样能够保证版本不会出错。 J

ar: commons-beanutils-1.7.0.jar commons-digester-2.0.jar commons-collections-3.1.jar 

tiles-jsp-2.0.6.jar tiles-core-2.0.6.jar tiles-api-2.0.6.jar

 struts2-tiles-plugin-2.2.3.1.jar

 2.配置web.xml 

配置web.xml主要涉及下面2个内容:

1.为系统上下文配置两个环境变量 2.为tiles天加监听器

 <context-param>

 <param-name>org.apache.tiles.CONTAINER_FACTORY</param-name>

 <param-value>org.apache.struts2.tiles.StrutsTilesContainerFactory</param-value>

 </context-param>

 <context-param> 

<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>

 <param-value>/WEB-INF/tiles-defs.xml</param-value> 

</context-param>

 <listener> 

<listener-class> org.apache.struts2.tiles.StrutsTilesListener 

</listener-class>  

 </listener>

 这样由监听器获到取tiles组装请求时,交给StrutsTilesContainerFactory处理,StrutsTilesContainerFactory根据请求的参数(也就是被调用的小页面的名称)在tiles-defs.xml中找,如果没有找到则会报出异常,找到之后就会将页面组装进来。 

3.紧接着就应该讲tiles-defs.xml如何配置,一般情况下将她放在WEB-INF下。

内容格式如下: 

<?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_0.dtd"> 

<tiles-definitions>  

<definition name="testdefault" template="/user/tiles.jsp" >    

<put-attribute name="header" value="/index.jsp"></put-attribute>

 <put-attribute name="copy" value="/user/user-reg-form.jsp">

</put-attribute> 

</definition>

 </tiles-definitions> 

definition name对于action完成后result所返回的内容,

比如有如下一段action配置 

<package name="test" namespace="/taobao/test" extends="tiles-default">

 <action name="userFormtest" class="com.nj180.taobao.test.TestTiles" method="execute"> 

 <result name="success" type="tiles">testdefault</result> 

</action>

 </package> 

当这个action无误的执行后就会去寻找tiles-defs.xml 文件中的name=testdefault的template属性,这时候template属性就是这个action执行完的真正去向。(是不是明白大概是怎么个过程了呢?)。

当我们不适用tiles的时候,可能直接会写下面的action配置: <action name="userFormtest" class="com.nj180.taobao.test.TestTiles" method="execute">  <result name="success">/user/tiles.jsp</result> </action> 这样执行完成后,就直接返回到了/user/tiles.jsp。所以这两强调两个问题: 1. 使用tiles,action中必须将type属性置为tiles,否则会报异常,找不到资源 2. Package 要继承tiles-default  好了,现在假定所有工作都完成了,我们来看一下tiles都做了什么?action完成后,会返回user/tiles.jsp,这时候我们就可以在user/tiles.jsp的任意位置去使用index.jsp,user/user-reg-form.jsp,因为他们已经被组装进来了!在真实的项目中一般都组装通用性较强的页面如头部和尾部,每个页面肯定还会有自身的逻辑。注意:虽然两个jsp被组装进来了,但是如果你再user/tiles.jsp不去使用,那么所有的工作相当于白做。所以tiles可以一次组装很多页面到目标页面,到目标页面之后我们还可以进行二次操作,这是include不能够实现的  说明:在写配置文件的时候还需要注意路径问题,大家可以写项目的相对路径,比如我的写法:<definition name="testdefault" template="/user/tiles.jsp" >,那么说明我这个jsp的真实路径就是WebContent/user/tiles.jsp  最后的问题,在jsp中如何使用tiles进行二次选择操作。首先我需要导入tiles的标签文件,这样我们才能够在页面使用,就像使用struts的其他标签(c)一样。在tiles-jsp-2.0.6.jar包中可以找到tiles-jsp.tld将他复制到WEB-INF下面在页面进行引用<%@taglib uri="/WEB-INF/tld/struts-tiles.tld" prefix="tiles"%>   

body><h1>First Page Coming</h1><tiles:insertAttribute name="copy"/> <hr> <h1>Second Page Coming</h1> <tiles:insertAttribute name="header"/>  <hr></body>

你可能感兴趣的:(struts2,tiles)