Вы можете интегрировать шаблоны Tiles – как и любую другую технологию представления – в веб-приложения, использующие Spring. В данном разделе в общих чертах описано, как это сделать.

Этот раздел посвящен поддержке Spring для Tiles версии 3 в пакете org.springframework.web.servlet.view.tiles3.

Зависимости

Чтобы иметь возможность использовать шаблоны Tiles, вы должны добавить зависимость от Tiles версии 3.0.1 или выше и его транзитивные зависимости в ваш проект.

Конфигурация

Чтобы иметь возможность использовать Tiles, вы должны сконфигурировать его с помощью файлов, содержащих определения (основную информацию об определениях и других понятиях Tiles см. на сайте https://tiles.apache.org). В Spring это делается с помощью TilesConfigurer. В следующем примере конфигурации ApplicationContext показано, как это сделать:

<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>

В предыдущем примере определены пять файлов, содержащих определения. Все файлы расположены в каталоге WEB-INF/defs. При инициализации WebApplicationContext загружаются файлы и инициализируется фабрика определений. После этого шаблоны Tiles, включенные в файлы определений, можно использовать в качестве представлений в вашем веб-приложении Spring. Чтобы иметь возможность использовать представления, необходимо обеспечить наличие ViewResolver, как и для любой другой технологии представления в Spring: обычно это удобный TilesViewResolver.

Можно задать определения шаблонов Tiles под конкретные региональные настройки, добавив знак подчеркивания, а затем сами региональные настройки, как показано в следующем примере:

<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>

При предыдущей конфигурации tiles_fr_FR.xml используется для запросов с региональными настройками fr_FR, а tiles.xml используется по умолчанию.

Поскольку символы подчеркивания используются для обозначения региональных настроек, не рекомендуется использовать их в других именах файлов для определений шаблонов Tiles.

UrlBasedViewResolver

UrlBasedViewResolver создает экземпляр данного viewClass для каждого представления, которое он должен распознать. Следующий бин определяет UrlBasedViewResolver:

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

SimpleSpringPreparerFactory и SpringBeanPreparerFactory

В качестве дополнительной функции Spring также поддерживает две специальные реализации PreparerFactory для шаблонов Tiles. Подробнее о том, как использовать ссылки на ViewPreparer в файлах определения шаблонов Tiles, см. в документации по Tiles.

Вы можете задать SimpleSpringPreparerFactory для автоматического обнаружения и связывания экземпляров ViewPreparer на основе заданных подготавливающих классов, применяя обратные вызовы контейнера Spring, а также применяя сконфигурированные BeanPostProcessors в Spring. Если была активирована контекстная конфигурация аннотаций Spring, аннотации в классах ViewPreparer автоматически обнаруживаются и применяются. Обратите внимание, что для этого требуется наличие подготавливающих классов в файлах определения шаблонов Tiles, как это происходит в случае с PreparerFactory по умолчанию.

Вы можете задать SpringBeanPreparerFactory для работы с заданными подготавливающими именами (вместо классов), получая соответствующий бин Spring из контекста приложения DispatcherServlet. В этом случае весь процесс создания бинов находится под контролем контекста приложения Spring, что позволяет использовать явную конфигурацию внедрения зависимостей, бины, входящие в область доступности, и так далее. Обратите внимание, что необходимо определять одно определение бина Spring для каждого подготавливающего имени (как это делает в ваших определениях шаблонов Tiles). В следующем примере показано, как определить свойство SpringBeanPreparerFactory для бина 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>
    <!-- разрешение подготавливающих имен как имен определений бинов Spring -->
    <property name="preparerFactoryClass"
            value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory"/>
</bean>