«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.