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