«1. Введение
В этом кратком руководстве мы рассмотрим, как работать с логическими значениями в Thymeleaf.
Прежде чем мы углубимся в детали, основы Thymeleaf можно найти в этой статье.
2. Вычисление выражений как логических значений
В Thymeleaf любое значение может быть преобразовано в логическое значение. У нас есть несколько значений, интерпретируемых как false:
-
null логическое значение false число 0 символ \\0 строки «false», «off» и «no»
Любое другое значение оценивается как true .
3. Использование логических значений в качестве условий рендеринга
Для условного рендеринга HTML-элемента у нас есть две опции: атрибуты th:if и th:unless.
Их эффект прямо противоположен — Thymeleaf будет отображать элемент с атрибутом th:if, только если значение атрибута истинно, и с атрибутом th:unless, только если его значение равно false:
<span th:if="${true}">will be rendered</span>
<span th:unless="${true}">won't be rendered</span>
<span th:if="${false}">won't be rendered</span>
<span th:unless="${false}">will be rendered</span>
4 Логические и условные операторы
Кроме того, мы можем использовать три классических логических оператора в Thymeleaf:
-
и или отрицание с ключевым словом not или символом «!»
Мы можем использовать эти операторы внутри выражения переменных или объединение с ними нескольких выражений переменных:
<span th:if="${isRaining or isCold}">The weather is bad</span>
<span th:if="${isRaining} or ${isCold}">The weather is bad</span>
<span th:if="${isSunny and isWarm}">The weather is good</span>
<span th:if="${isSunny} and ${isWarm}">The weather is good</span>
<span th:if="${not isCold}">It's warm</span>
<span th:if="${!isCold}">It's warm</span>
<span th:if="not ${isCold}">It's warm</span>
<span th:if="!${isCold}">It's warm</span>
Мы также можем использовать условные операторы: if-then, if-then-else и операторы по умолчанию.
Оператор if-then-else — это обычный тернарный оператор, или ?: оператор:
It's <span th:text="${isCold} ? 'cold' : 'warm'"></span>
Более того, оператор if-then — это упрощенная версия, в которой у нас нет части else:
<span th:text="${isRaining or isCold} ? 'The weather is bad'"></span>
Оператор по умолчанию возвращает первый операнд, если он не равен нулю, и второй в противном случае:
<span th:text="'foo' ?: 'bar'"></span> <!-- foo -->
<span th:text="null ?: 'bar'"></span> <!-- bar -->
<span th:text="0 ?: 'bar'"></span> <!-- 0 -->
<span th:text="1 ?: 'bar'"></span> <!-- 1 -->
Оператор по умолчанию также называется оператором Элвиса из-за его сильного сходства с прической Элвиса.
Обратите внимание, что оператор Элвиса выполняет только нулевую проверку, он не оценивает первый операнд как логический.
5. Вспомогательный объект #bools
#bools — это служебный объект, который доступен в выражениях по умолчанию и имеет несколько удобных методов:
-
#bools.isTrue(obj) возвращает значение истинности аргумента. #bools.isFalse(obj) возвращает, оценивается ли аргумент как false #bools.xxxIsTrue(коллекция) преобразует элементы аргумента в логические значения с помощью #bools.isTrue(), а затем собирает их в коллекцию того же типа #bools.xxxIsFalse (коллекция) преобразует элементы аргумента в логические значения с помощью #bools.isFalse(), затем собирает их в коллекцию того же типа #bools.xxxИ(коллекция) возвращает true, если все элементы в аргументе оцениваются как истинные #bools.xxxOr (коллекция) возвращает истину, если любой элемент в аргументе оценивается как истина
В приведенных выше методах xxx может быть массивом, списком или набором, в зависимости от аргумента метода (и возвращаемого значения в случае xxxIsTrue() и xxxIsFalse( )).
6. Заключение
В этой статье мы увидели, как Thymeleaf интерпретирует значения как логические значения, а также как мы можем отображать элементы условно и работать с логическими выражениями.
Как обычно, код (с большим количеством примеров) доступен на Github.