Учебник Thymeleaf: Глава 7. Условное выполнение
Оглавление
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