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
Комментариев нет:
Отправить комментарий