Javenue logo

Javenue

Программирование на Java

Информационные технологии

Введение в Velocity - Java Туториал

Velocity - один из множества подпроектов Apache, ранее Jakarta. Это движок для обработки шаблонов (template engine), который позволяет напрямую обращаться к методам и полям Java классов.

С помощью этого движка можно генерировать HTML-страницы, SQL-запросы, XML-документы и многое другое. Хоть официально проект уже не поддерживается, Velocity очень популярен. В среде разработки Intellij IDEA есть встроенная поддержка Velocity (об этом читайте в конце статьи).

[В начале тысячелетия большой популярностью пользовался XSL (EXtensible Stylesheet Language). Это тоже обработчик шаблонов, но XSL-преобразования удобнее выполнять при работе с XML-документами, а Velocity помогает при непосредственной работе с Java-объектами.]

Чаще всего я использую Velocity framework для веб-проектов, а именно для генерации web-страниц как альтернативу JSP, JSF и прочим тяжелым технологиям. Для написания кода шаблонов используется VTL - Velocity Template Language. Перед тем как перейти к туториалу, перечислю некоторые преимущества движка Velocity:

  • язык шаблонов VTL прост в изучении (в чем вы убедитесь дальше);
  • отделяет Java-код от кода веб-страниц;
  • служит отличной альтернативой для JSP, JSF, Freemarker и т.д.;
  • может быть использован при создании библиотек тэгов для JSP;
  • потенциально позволяет веб-дизайнеру и программисту работать раздельно.

Перейдем к описанию языковых конструкций VTL (Velocity Template Language).

Все операторы языка начинаются с символа #. пспользуйте ##, в качестве однострочного, и #* с последующим *# для многострочного комментариев.

В VTL существует три вида вызовов - это переменные, свойства и методы. Все что участвует в вызове или является его результатом считается строкой (при работе с объектом, движок вызовет метод toString() этого объекта).

Переменные в VTL начинаются с символа $, например $var. В случае, если после переменной сразу идет текст, имя переменной берется в фигурные скобки - ${var}iable. Запись $variable указывает на совсем другой объект.

Свойтва - это поля класса, к ним можно доступиться так - $var.Property. При выполнении этого кода, будет вызван метод getProperty() для соответсвующего Java-объекта.

Методы в теплейтах можно вызывать таким образом: $var.doSomething().

Для инициализации переменной используется конструкция set, например

#set ($var = “value”).

В VTL есть конструкции if-else, if-elseif. Пример:

#if ($var > 5) <strong>greater</strong>
#elseif ($var < 5) <strong>lesser</strong>
#else <strong>equal</strong>
#end

Велосити предоставляет только один вариант цикла. Он реализуется через оператор foreach. Например:

<ul> 
#foreach($var in $varArray)
<li>$var</li>
#end
</ul>

Переменная varArray может представлять собой массив, вектор или хэш-таблицу.

Оператор include позволяет вставить содержимое текстового файла в темплейт:

#include("file.txt").

Элемент parse необходим для вставки другого файла-шаблона VTL. Пример использования:

#parse("template.vm").

При отладке кода можно использовать оператор

#stop

Этот оператор останавливает обработчик шаблонов.

Ключевое слово macro используется для написания макросов, как с параметрами, так и без таковых. Макрос после объявления может быть вызван в любом месте кода. Пример макроса, который генерирует элемент <br /> в месте вызова:

#macro(br) <br /> 
#end

Вызвать его можно так: #br().

В языке VTL в качестве escape-символа выступает обратный слэш "\".

Не хочу вас огорчать :), но это все конструкции языка. Нюансы языка VTL можно выяснить в комментариях.

Для работы движка необходим конфигурационный файл velocity.config. Как вариант всю конфигурацию можно задать программно. Пример файла с описанием параметров находится в zip-архиве пакета.

Для обработки кода VTL нужен экземпляр класса VelocityEngine. Функция mergeTemplate(String templateName, Context context, Writer writer) принимает на вход имя шаблона и контекст и пишет результат во Writer.

Обычно я описываю небольшой Singleton класс, который загружает или описывает конфигурацию с помощью метода init(Properties props) и обрабатывает ошибки при чтении конфигурации и обработке темплейтов.

Вот и все.

Возможно вас заинтересует практическое руководство по использованию Velocity: Velocity для создания библиотек тэгов (Taglib)

Updated: Как я уже говорил, в IDEA есть встроенная поддержка Велосити. Для того, чтобы Intellij IDEA могла проводить анализ кода прямо в vm-файлах, можно воспользоваться такой конструкцией:

#* @vtlvariable name="user" type="javenue.User" *#

Теперь встретив переменную $user можно воспользоваться всеми преимуществами code-completion в среде разработки.


Комментариев: 0

  Выйти

  * для публикации комментариев нужно