25
February

Описание Velocity Framework

Posted in: Java open-source проекты, Java technologies, J2SE |

Velocity - один из множества подпроектов Jakarta. Это своеобразный движок для обработки шаблонов. Velocity framework позволяет дизайнерам веб-страниц обращаться к методам Java классов. С помощью этого движка можно генерировать веб-страницы, SQL-запросы, XML-документы и т.д.
Вы наверное сразу вспомнили технологию XSL. Да, это тоже обработчик шаблонов, но XSL-преобразования удобнее выполнять при работе с XML-документом, а Velocity помогает при непосредственной работе с Java-объектами.
Перечислю некоторые преимущества движка:

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

Перейдем к описанию языковых конструкций 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 для создания библиотек тэгов (taglibs), а если нет - на блоге есть еще много других статей, которые вас заинтересуют.

Продолжение статьи: Velocity для создания библиотек тэгов (Taglib)

2 Comments »

RSS feed for comments on this post. TrackBack URI



Stan
September 30, 2007 #

Очень заинтересовало. Хотелось бы почитать как настроить это чудо и небольшой примерчик использования. Заранее благодарен.

January 29, 2008 #

Привет, Stan.
Добавил ссылку на практический пример использования velocity в конец статьи.

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>