Puedes integrar plantillas de Tiles, como cualquier otra tecnología de presentación, en aplicaciones web que utilicen Spring. Esta sección describe cómo hacer esto.

Esta sección trata sobre la compatibilidad de Spring con Tiles versión 3 en el paquete org.springframework.web.servlet.view.tiles3.

Dependencias

Para poder utilizar plantillas de Tiles, debe agregar una dependencia en la versión 3.0.1 o superior de Tiles y sus dependencias transitivas con su proyecto.

Configuración

Para poder utilizar Tiles, debe configurarlo con archivos de definición (para obtener información básica sobre definiciones y otros conceptos de Tiles, consulte https://tiles.apache.org). En Spring esto se hace usando TilesConfigurer. El siguiente ejemplo de configuración de ApplicationContext muestra cómo hacer esto:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.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>

El ejemplo anterior definió cinco archivos que contienen definiciones. Todos los archivos se encuentran en el directorio WEB-INF/defs. Cuando se inicializa WebApplicationContext, se cargan los archivos y se inicializa la fábrica de definiciones. Las plantillas de Tiles incluidas en los archivos de definición se pueden usar como vistas en su aplicación web Spring. Para poder utilizar vistas, debe proporcionar un ViewResolver, como cualquier otra tecnología de visualización en Spring: generalmente el conveniente TilesViewResolver.

Puedes definir definiciones de plantillas de Tiles para configuraciones regionales específicas agregando un guión bajo seguido de la configuración regional, como se muestra en el siguiente ejemplo:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/defs/tiles.xml</value>
            <value>/WEB-INF/defs/tiles_fr_FR.xml</value>
        </list>
    </property>
</bean>

Con la configuración anterior, tiles_fr_FR.xml se usa para consultas con configuraciones regionales fr_FR y tiles.xml se usa de forma predeterminada.

Debido a que los guiones bajos se usan para indicar configuraciones locales, no se recomienda usarlos en otros nombres de archivos para definiciones de plantillas de Tiles.

UrlBasedViewResolver

El UrlBasedViewResolver crea una instancia de la viewClass dada para cada vista que necesita reconocer. El siguiente bean define UrlBasedViewResolver:

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
</bean>

SimpleSpringPreparerFactory y SpringBeanPreparerFactory

Como característica adicional, Spring también admite dos implementaciones especiales PreparerFactory para plantillas de Tiles. Para obtener más información sobre cómo utilizar las referencias de ViewPreparer en archivos de definición de plantillas de Tiles, consulte la documentación de Tiles.

Puede definir un SimpleSpringPreparerFactory para descubrir y vincular automáticamente instancias de ViewPreparer en función de clases de preparador especificadas, utilizando devoluciones de llamada de contenedor Spring y también utilizando BeanPostProcessors configurados en Spring. Si se ha habilitado la configuración del contexto de anotación de Spring, las anotaciones en las clases ViewPreparer se detectan y aplican automáticamente. Tenga en cuenta que esto requiere la presencia de clases de preparador en los archivos de definición de plantilla de Tiles, como es el caso con PreparerFactory de forma predeterminada.

Puede especificar SpringBeanPreparerFactory para operar con nombres de preparador determinados (en lugar de clases), recuperando el Spring Bean correspondiente del contexto de la aplicación DispatcherServlet. En este caso, todo el proceso de creación de beans está bajo el control del contexto de la aplicación Spring, lo que permite la configuración explícita de inyección de dependencia, beans con ámbito, etc. Tenga en cuenta que debe definir una definición de Spring Bean para cada nombre de preparador (como lo hacen las definiciones de su plantilla Tiles). El siguiente ejemplo muestra cómo definir la propiedad SpringBeanPreparerFactory para el bean TilesConfigurer:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.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>
    <!-- resolve preparer names as Spring bean definition names -->
    <property name="preparerFactoryClass"
            value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory"/>
</bean>