Учебник Thymeleaf: Глава 7. Условное выполнение

habr.png

Оглавление

7 Условное выполнение


7.1 Простые условия: «if» (если) и «unless» (если не)


Иногда вам понадобится фрагмент шаблона, чтобы появляться только в результате выполнения определенного условия.

Например, представьте, что мы хотим показать в таблице продуктов столбец с количеством комментариев, которые существуют для каждого продукта, и, если есть какие-либо комментарии — ссылку на страницу комментариев.

Для этого используем атрибут th: if:

NAME PRICE IN STOCK COMMENTS
Onions 2.41 yes 2 comment/s view


Здесь очень много вещей, поэтому давайте сосредоточимся на важной строке:

view


Этот код создаст ссылку на страницу комментариев (с URL /product/comments) с параметром prodId, установленным на идентификатор продукта, но только если у продукта есть какие-либо комментарии.

Давайте посмотрим на полученную разметку:

NAME PRICE IN STOCK COMMENTS
Fresh Sweet Basil 4.99 yes 0 comment/s
Italian Tomato 1.25 no 2 comment/s view
Yellow Bell Pepper 2.50 yes 0 comment/s
Old Cheddar 18.75 yes 1 comment/s view


Отлично! Это именно то, что мы хотели.

Обратите внимание, что атрибут th: if будет не только оценивать логические условия. Его возможности немного выше этого, и он будет оценивать указанное выражение как истинное, следуя этим правилам:

Если значение не равно null:

  • Если значение является логическим и true
  • Если значение является числом и отличным от нуля
  • Если значение является символом и отличным от нуля
  • Если значение является String и не является «false», «off» или «no»
  • Если значение не является boolean, числом, символом или String


Если значение равно null, th: if будет установлено в значение false.

Кроме того, th: if имеет инверсивный атрибут, th: unless, который мы могли бы использовать в предыдущем примере вместо использования not (отрицания) внутри выражения OGNL:

view


7.2 Switch statements


Существует также способ условно отображать контент, используя эквивалент структуры switch в Java: набор атрибутов th: switch / th: case.

User is an administrator

User is a manager


Обратите внимание, что как только один атрибут th: case оценивается как true, каждый другой атрибут th: case в том же контексте коммутатора оценивается как false.

Параметр по умолчанию указан как: th: case=»*»:

User is an administrator

User is a manager

User is some other thing

© Habrahabr.ru