?
This document uses PHP Chinese website manual Release
在使用了Spring的web項(xiàng)目中,很可能會(huì)用到Tiles--就像任何其它的web層技術(shù)。下面簡(jiǎn)要講述了如何使用。
注意:
這部分重點(diǎn)在于Spring中的
org.springframework.web.servlet.view.tiles2
包對(duì)Tiles 2(Tiles獨(dú)立版本,要求Java 5+)的支持。在最初的
org.springframework.web.servlet.view.tiles
包中Spring同樣繼續(xù)支持Tiles 1.x(也可以叫“Struts Tiles”,作為Struts 1.1+的成員;兼容 Java 1.4)。
使用Tiles項(xiàng)目中必須得包含一些額外的資源,以下是你需要的資源列表:
Tiles version 2.0.4以及更高版本
Commons BeanUtils
Commons Digester
Commons Logging
這些資源全部包含于Spring的發(fā)行包中
使用Tiles,你必須為它配置一些包含了定義信息的文件(關(guān)于Tiles定義和其他概念的信息,可以參考
http://tiles.apache.org)。在Spring中,可以使用
TilesConfigurer
來(lái)完成這項(xiàng)工作。看看下面這個(gè)應(yīng)用上下文配置的例子:
<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>
正如你所看到的,有五個(gè)包含定義的文件,都放在
'WEB-INF/defs'
目錄下。在WebApplicationContext
初始化的階段,這些文件被加載,同時(shí)由
factoryClass
屬性定義的工廠類被初始化。然后,定義文件中的tiles可以做為views在Spring的web
項(xiàng)目中使用。為使views正常工作,你必須有一個(gè)
ViewResolver
,就像使用spring提供的任何其它view層技術(shù)一樣。它有二種選擇:
UrlBasedViewResolver
和ResourceBundleViewResolver
。
UrlBasedViewResolver
為它解析的每個(gè)view實(shí)例化一個(gè)viewClass
類的實(shí)例。
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> </bean>
ResourceBundleViewResolver
類
需要一個(gè)屬性文件,其中包含了它需要使用的視圖名和視圖類:
<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
類時(shí),你可以混用不同的view層技術(shù)。
注意,Tiles 2的TilesView
類支持 JSTL(JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù))的開箱即用,同時(shí),為支持Tiles 1.x,提供一個(gè)單獨(dú)的TilesJstlView
子類。
作為一個(gè)高級(jí)的特性,Spring支持兩個(gè)特定的Tiles 2PreparerFactory
實(shí)現(xiàn)。如何Tiles定義文件中使用
ViewPreparer
引用,詳細(xì)資料查看Tiles文檔。
基于指定的preparer類,指定SimpleSpringPreparerFactory
自動(dòng)裝配 ViewPreparer 實(shí)體,不但應(yīng)用 Spring的容器回調(diào)而且應(yīng)用配置Spring BeanPostProcessors。假如Spring的上下文范圍
annotation-config 已經(jīng)被激活,ViewPreparer 類中的注解將被自動(dòng)檢測(cè)到及應(yīng)用。注意,在 Tiles 定義文件中預(yù)計(jì)的preparer
classes,就像默認(rèn)PreparerFactory
所作的一樣。
指定SpringBeanPreparerFactory
來(lái)操作指定preparer名稱,而不是類,從DispatcherServlet的應(yīng)用上下文
獲取相應(yīng)的Spring bean。在這種情況下,完整的 bean 創(chuàng)建過(guò)程將在Spring應(yīng)用上下文控制中,允許明確使用依賴注入,范圍bean等等。
注意,需要定義為每一個(gè)preparer名稱定義一個(gè)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>