Шаблоны Velocity

Шаблоны 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