Главная » Spring » Использование шаблонов FreeMarker Spring

0

Механизм шаблонов FreeMarker является более сложным инстру- ментом, чем Velocity, но эта сложность обусловлена более широкими возможностями. FreeMarker имеет встроенную поддержку некото- рых задач, таких форматирование дат и чисел, и удаление пробель- ных символов. Эти возможности доступны в Velocity только через дополнительные инструменты.

Как вскоре будет показано, использование FreeMarker совместно с фреймворком Spring MVC не сильно отличается от использования Velocity. Но не будем забегать вперед и начнем с создания шаблона FreeMarker для использования в приложении.

Создание представления на основе FreeMarker

Допустим, что после дополнительных исследований был сделан вывод, что шаблоны FreeMarker лучше отвечают вашим потребно- стям, чем Velocity. Поэтому для реализации уровня представлений в приложении вместо Velocity было решено подключить FreeMarker к фреймворку Spring MVC. В листинге 8.17 представлен шаблон FreeMarker домашней страницы приложения home.ftl.

Листинг 8.17. Шаблон FreeMarker домашней страницы приложения

<html>

<head><title>Rantz</title></head>

<body>

<h2>Rantz:</h2>

<a   href="addRant.htm">Add   rant</a><br/>

<a   href="register.htm">Register   new   motorist</a><br/>

<ul>

<#list rants as rant>

<li>${rant.vehicle.state}/

${rant.vehicle.plateNumber}  –

${rant.rantText}</li>

</#list>

</ul>

</body>

</html>

Как видите, версия домашней страницы на основе FreeMarker несильно отличается от версии на основе Velocity, представленной в листинге 8.15. Как и в Velocity (и в JSP, если уж на то пошло), нотация ${} используется для отображения значений атрибутов.

Шаблон home.ftl демонстрирует лишь малую толику возможно- стей FreeMarker. Дополнительную информацию о механизме шаб- лонов FreeMarker можно найти на домашней странице проекта по адресу: http://freemarker.sourceforge.net.

Настройка механизма FreeMarker

Как и Velocity, механизм шаблонов FreeMarker требует настрой- ки в контексте Spring для обеспечения возможности использования шаблонов FreeMarker в качестве представлений. Для начала необхо- димо объявить компонент FreeMarkerConfigurer в конфигурационном файле, как показано ниже:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.

➥ freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPath" value="WEB-INF/freemarker/" />

</bean>

Компонент FreeMarkerConfigurer для FreeMarker суть то же самое, что компонент VelocityConfigurer для Velocity. Он используется для настройки механизма FreeMarker. Как минимум, нужно сообщить механизму FreeMarker, где находятся шаблоны. Для этого исполь- зуется свойство templateLoaderPath (здесь указано, что шаблоны хра- нятся в каталоге WEB-INF/freemarker/).

Дополнительные параметры настройки FreeMarker определя- ются в виде свойств внутри свойства freemarkerSettings. Например, FreeMarker каждые пять секунд (по умолчанию) проверяет шабло- ны на наличие изменений, чтобы при необходимости повторно за- грузить их. Но проверка изменений в шаблонах может отнимать немалое время. Когда приложение находится в эксплуатации и не предполагается часто изменять шаблоны, интервал между проверка- ми можно увеличить до часа или больше.

Для этого следует изменить параметр template_update_delay в свой- стве  freemarkerSettings.  Например:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.

➥ freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPath" value="WEB-INF/freemarker/" />

<property  name="freemarkerSettings">

<props>

<prop    key="template_update_delay">3600</prop>

</props>

</property>

</bean>

Обратите внимание, что, подобно свойству velocityProperties ком- понента VelocityConfigurer, свойство freemarkerSettings содержит эле- мент <props>. В данном случае он содержит единственный элемент

<prop> – параметр template_update_delay со значением 3600 (секунд), указывающий, что проверка на наличие обновлений будет выпол- няться один раз в час.

Разрешение представлений FreeMarker

Следующее, что необходимо сделать, – объявить арбитр пред- ставлений для FreeMarker:

<bean id="viewResolver" class="org.springframework.web.servlet.view.

➥   freemarker.FreeMarkerViewResolver">

<property  name="suffix"  value=".ftl"  />

</bean>

Компонент FreeMarkerViewResolver действует подобно компонентам

VelocityViewResolver   и  InternalResourceViewResolver.  Разрешение  имен

файлов шаблонов выполняется за счет добавления к логическому имени представления префикса, определяемого свойством prefix, и суффикса, определяемого свойством suffix. Как и при использо- вании VelocityViewResolver, здесь устанавливается только значение свойства suffix, потому что путь к шаблону уже определен в свой- стве templateLoaderPath   компонента FreeMarkerConfigurer.

Экспортирование атрибутов запроса и сеанса

В разделе 8.6.1 было показано, как настроить в компоненте VelocityViewResolver копирование атрибутов запроса и/или сеанса в модель, чтобы они были доступны в шаблоне в виде переменных. Компонент FreeMarkerViewResolver также позволяет экспортировать атрибуты запроса и сеанса в шаблоны FreeMarker. Для этого нужно установить свойство exposeRequestAttributes или exposeSessionAttributes (или оба) в значение true:

<bean id="viewResolver" class="org.springframework.web.servlet.view.

➥   freemarker.FreeMarkerViewResolver">

<property  name="exposeRequestAttributes">

<value>true</value>

</property>

<property  name="exposeSessionAttributes">

<value>true</value>

</property>

</bean>

Здесь оба свойства установлены в true. В результате атрибуты и запроса, и сеанса будут копироваться в атрибуты шаблона и будут доступны в выражениях на языке шаблонов FreeMarker.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии