14.3. Tiles

Spring Framework

14.3. Tiles

在使用了Spring的web项目中,很可能会用到Tiles--就像任何其它的web层技术。下面粗略讲述了如何使用。

14.3.1. 需要的资源

使用Tiles项目中必须得包含一些额外的资源,以下是你需要的资源列表:

  • Struts 1.1以及更高版本

  • Commons BeanUtils

  • Commons Digester

  • Commons Lang

  • Commons Logging

这些资源全部包含于Spring的发行包中

14.3.2. 如何集成Tiles

使用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层技术一样。它有二种选择:InternalResourceViewResolverResourceBundleViewResolver

14.3.2.1.  InternalResourceViewResolver

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>

14.3.2.2.  ResourceBundleViewResolver

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 (&lt;b&gt;this is the name of a definition&lt;/b&gt;)

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层技术。