Шаблоны Velocity
Velocity Engine
Velocity Engine — это процессор шаблонов (обработчик шаблонов), базирующийся на Java, который обеспечивает простой, но мощный шаблонный язык, не требующий предварительной подготовки модели переменных для шаблона: в шаблон просто передаются ссылки на Java-объекты, а обработчик разбирает указанные методы и посредством Java Refection API получает их значения. Языковые конструкции описываются с помощью VTL (Velocity Template Language)
Вызовы VTL
Все операторы языка начинаются с символа #.
Для однострочного комментария - ## comment. Для многострочного конструкция #* comment *#
В VTL существует три вида вызовов - это переменные, свойства и методы. Все что участвует в вызове или является его результатом считается строкой (при работе с объектом, движок вызовет метод toString() этого объекта).
Переменные в VTL начинаются с символа $, например $var. В случае, если после переменной сразу идет текст, имя переменной берется в фигурные скобки - ${var}iable. Запись $variable указывает на совсем другой объект.
Свойтсва - это поля класса, к ним можно получить доступ с помощью точки - $var.Property. При выполнении этого кода, будет вызван метод getProperty() для соответсвующего Java-объекта.
Методы в темплейтах можно вызывать таким образом: $var.doSomething().
Основные конструкции
1. Инициализация
Для инициализации переменной используется конструкция set. Например:
```
#set ($var = “value”)
```
2. Условие
В VTL есть конструкции if-else, if-elseif. Например:
```
#if ($var > 5) <strong>greater</strong> #elseif ($var < 5) <strong>lesser</strong> #else <strong>equal</strong> #end
```
3. Цикл
Velocity предоставляет только один вариант цикла. Он реализуется через оператор foreach. Например:
```
<ul>
#foreach($var in $varArray)
<li>$var</li>
#end
</ul>
```
В данном примере <ul></ul> и <li></li> это html-конструкции. Можно использовать любые.
Переменная varArray может представлять собой массив, лист, вектор или хэш-таблицу.
4. Вставка ресурсов
Оператор include позволяет вставить содержимое текстового файла в темплейт:
```
#include("file.txt")
```
5. Парсинг других шаблонов
Элемент parse необходим для вставки другого файла-шаблона VTL. Пример использования:
```
#parse("template.vm")
```
6. Макросы
Ключевое слово macro используется для написания макросов, как с параметрами, так и без таковых. Макрос после объявления может быть вызван в любом месте кода. Пример макроса, который генерирует элемент <br /> в месте вызова:
```
#macro(br) <br />
#end
```
Вызвать его можно так:
```
#br()
```
7. Отладка
В языке VTL в качестве escape-символа выступает обратный слэш "\".
При отладке кода можно использовать оператор
```
#stop
```
Пример использования
Во вложении файл html (список продуктов). Второй файл с расширением .vm (расширение velocity engine) - с добавлением цикла по листу products (для динамического добавления).
Полезные ссылки
Вики с примерами - https://ru.wikipedia.org/wiki/Apache_Velocity
Туториал на русском - http://www.javenue.info/post/16
Туториал на английском - https://www.baeldung.com/apache-velocity
Документация - https://velocity.apache.org/engine/1.7/user-guide.html