15.3.Tiles

优质
小牛编辑
131浏览
2023-12-01

15.3. Tiles

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

15.3.1. 需要的资源

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

  • Struts 1.1以及更高版本

  • Commons BeanUtils

  • Commons Digester

  • Commons Lang

  • Commons Logging

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

15.3.2. 如何集成Tiles

使用Tiles,你必须为它配置一些包含了定义信息的文件(关于Tiles定义和其他概念的信息,可以参考 http://jakarta.apache.org/struts)。在Spring中,你可以使用 TilesConfigurer 来完成这项工作。看看下面这个应用上下文配置的例子:

<bean id="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

15.3.2.1. InternalResourceViewResolver

InternalResourceViewResolver为它解析的每个view实例化一个 viewClass 类的实例。

<bean id="viewResolver">
  <property name="requestContextAttribute" value="requestContext"/>
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles.TilesView"/>
</bean>

15.3.2.2. ResourceBundleViewResolver

ResourceBundleViewResolver需要一个属性文件,其中包含了它需要使用的视图名和视图类:

<bean id="viewResolver">
  <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 (<b>again, this is the name of a definition</b>)

findOwnersForm.class=org.springframework.web.servlet.view.JstlView
findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp
...

正如你所看到的,使用ResourceBundleViewResolver时你可以混用不同的view层技术。