在使用了Spring的web项目中,很可能会用到Tiles--就像任何其它的web层技术。下面粗略讲述了如何使用。
使用Tiles项目中必须得包含一些额外的资源,以下是你需要的资源列表:
Struts 1.1以及更高版本
Commons BeanUtils
Commons Digester
Commons Lang
Commons Logging
这些资源全部包含于Spring的发行包中
使用Tiles,你必须为它配置一些包含了定义信息的文件(关于Tiles定义和其他概念的信息,可以参考 http://jakarta.apache.org/struts)。在Spring中,你可以使用 TilesConfigurer
来完成这项工作。看看下面这个应用上下文配置的例子:
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles.TilesConfigurer"> <property name="factoryClass" value="org.apache.struts.tiles.xmlDefinition.I18nFactorySet"/> <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层技术一样。它有二种选择:InternalResourceViewResolver
和 ResourceBundleViewResolver
。
InternalResourceViewResolver
为它解析的每个view实例化一个 viewClass
类的实例。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="requestContextAttribute" value="requestContext"/> <property name="viewClass" value="org.springframework.web.servlet.view.tiles.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.tiles.TilesView
welcomeView.url=welcome (<b>this is the name of a definition</b>)
vetsView.class=org.springframework.web.servlet.view.tiles.TilesView
vetsView.url=vetsView (again, this is the name of a definition)
findOwnersForm.class=org.springframework.web.servlet.view.JstlView
findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp
...
正如你所看到的,使用ResourceBundleViewResolver
时你可以混用不同的view层技术。