在使用了Spring的web项目中,很可能会用到Tiles--就像任何其它的web层技术。下面简要讲述了如何使用。
注意:
这部分重点在于Spring中的
org.springframework.web.servlet.view.tiles2
包对Tiles 2(Tiles独立版本,要求Java 5+)的支持。在最初的
org.springframework.web.servlet.view.tiles
包中Spring同样继续支持Tiles 1.x(也可以叫“Struts Tiles”,作为Struts 1.1+的成员;兼容 Java 1.4)。
使用Tiles项目中必须得包含一些额外的资源,以下是你需要的资源列表:
Tiles version 2.0.4以及更高版本
Commons BeanUtils
Commons Digester
Commons Logging
这些资源全部包含于Spring的发行包中
使用Tiles,你必须为它配置一些包含了定义信息的文件(关于Tiles定义和其他概念的信息,可以参考
http://tiles.apache.org)。在Spring中,可以使用
TilesConfigurer
来完成这项工作。看看下面这个应用上下文配置的例子:
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> <property name="definitions"> <list> <value>/WEB-INF/defs/general.xml</value> <value>/WEB-INF/defs/widgets.xml</value> <value>/WEB-INF/defs/administrator.xml</value> <value>/WEB-INF/defs/customer.xml</value> <value>/WEB-INF/defs/templates.xml</value> </list> </property> </bean>
正如你所看到的,有五个包含定义的文件,都放在
'WEB-INF/defs'
目录下。在WebApplicationContext
初始化的阶段,这些文件被加载,同时由
factoryClass
属性定义的工厂类被初始化。然后,定义文件中的tiles可以做为views在Spring的web
项目中使用。为使views正常工作,你必须有一个
ViewResolver
,就像使用spring提供的任何其它view层技术一样。它有二种选择:
UrlBasedViewResolver
和ResourceBundleViewResolver
。
UrlBasedViewResolver
为它解析的每个view实例化一个viewClass
类的实例。
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> </bean>
ResourceBundleViewResolver
类
需要一个属性文件,其中包含了它需要使用的视图名和视图类:
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="views"/> </bean>
... welcomeView.class=org.springframework.web.servlet.view.tiles2.TilesView welcomeView.url=welcome (this is the name of a Tiles definition) vetsView.class=org.springframework.web.servlet.view.tiles2.TilesView vetsView.url=vetsView (again, this is the name of a Tiles definition) findOwnersForm.class=org.springframework.web.servlet.view.JstlView findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp ...
正如你所看到的,使用ResourceBundleViewResolver
类时,你可以混用不同的view层技术。
注意,Tiles 2的TilesView
类支持 JSTL(JSP标准标签库)的开箱即用,同时,为支持Tiles 1.x,提供一个单独的TilesJstlView
子类。
作为一个高级的特性,Spring支持两个特定的Tiles 2PreparerFactory
实现。如何Tiles定义文件中使用
ViewPreparer
引用,详细资料查看Tiles文档。
基于指定的preparer类,指定SimpleSpringPreparerFactory
自动装配 ViewPreparer 实体,不但应用 Spring的容器回调而且应用配置Spring BeanPostProcessors。假如Spring的上下文范围
annotation-config 已经被激活,ViewPreparer 类中的注解将被自动检测到及应用。注意,在 Tiles 定义文件中预计的preparer
classes,就像默认PreparerFactory
所作的一样。
指定SpringBeanPreparerFactory
来操作指定preparer名称,而不是类,从DispatcherServlet的应用上下文
获取相应的Spring bean。在这种情况下,完整的 bean 创建过程将在Spring应用上下文控制中,允许明确使用依赖注入,范围bean等等。
注意,需要定义为每一个preparer名称定义一个Spring bean(用于Tiles定义中)。
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/defs/general.xml</value>
<value>/WEB-INF/defs/widgets.xml</value>
<value>/WEB-INF/defs/administrator.xml</value>
<value>/WEB-INF/defs/customer.xml</value>
<value>/WEB-INF/defs/templates.xml</value>
</list>
</property>
<!-- resolving preparer names as Spring bean
definition names -->
<property name="preparerFactoryClass"
value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory"/>
</bean>