February
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.
Добавил ссылку на практический пример использования velocity в конец статьи.