Перейти к основному содержимому

Условные выражения в Thymeleaf

· 3 мин. чтения

1. Обзор

В этом уроке мы рассмотрим различные типы условных выражений, доступных в Thymeleaf .

Для краткого ознакомления с Thymeleaf обратитесь к этой статье .

2. Зависимости Maven

Начнем с зависимостей Maven, которые необходимы для использования Thymeleaf вместе со Spring:

<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>

Для других выпусков Spring следует использовать соответствующую библиотеку thymeleaf-springX , где X означает версию Spring. Также обратите внимание, что Spring 5 поддерживается начиная с 3.0.8.RELEASE от Thymeleaf.

Последние версии необходимых зависимостей можно найти здесь .

3. Условные предложения тимьяна

Мы должны различать условные операторы, которые позволяют отображать текст внутри HTML-элемента в зависимости от условия, и те, которые управляют созданием самого HTML-элемента.

Давайте определим наш класс модели Учитель , который мы будем использовать в этой статье:

public class Teacher implements Serializable {
private String gender;
private boolean isActive;
private List<String> courses = new ArrayList<>();
private String additionalSkills;

3.1. Элвис Оператор

Оператор Элвиса ?: позволяет отображать текст внутри элемента HTML в зависимости от текущего состояния переменной.

Мы можем использовать выражения по умолчанию для предоставления текста по умолчанию, если переменная имеет значение null :

<td th:text="${teacher.additionalSkills} ?: 'UNKNOWN'" />

В верхнем примере мы хотим отобразить содержимое переменной Teacher.additionalSkills , если она определена, и мы хотим, чтобы в противном случае отображался текст « НЕИЗВЕСТНО ».

Также возможно отображать произвольный текст в зависимости от логического выражения:

<td th:text="${teacher.active} ? 'ACTIVE' : 'RETIRED'" />

Мы можем запросить простую логическую переменную, как в предыдущем примере, но также возможны сравнения строк и проверки диапазона.

Поддерживаются следующие компараторы и их текстовые представления > (gt), >= (ge), < (lt), <= (le), == (eq) и != (ne) .

3.2. Если - если только

Атрибуты th:if и th:unless позволяют отображать HTML-элемент в зависимости от заданного условия:

<td>
<span th:if="${teacher.gender == 'F'}">Female</span>
<span th:unless="${teacher.gender == 'F'}">Male</span>
</td>

Если содержимое переменной Teacher.gender равно F, то отображается элемент span со значением « Female ».

В противном случае отображается элемент с « Мужской ». Такая установка сравнима с предложением if-else , присутствующим в большинстве языков программирования.

3.3. Переключатель – Корпус

Если существует более двух возможных результатов выражения, мы можем использовать атрибуты th:switch и th:case для условного рендеринга HTML-элементов:

<td th:switch="${#lists.size(teacher.courses)}">
<span th:case="'0'">NO COURSES YET!</span>
<span th:case="'1'" th:text="${teacher.courses[0]}"></span>
<div th:case="*">
<div th:each="course:${teacher.courses}" th:text="${course}"/>
</div>
</td>

В зависимости от размера списка Teacher.Courses мы отображаем либо текст по умолчанию, либо отдельный курс, либо все доступные курсы. Звездочка (*) используется для параметра по умолчанию.

4. Вывод

В этой короткой статье мы исследовали различные типы условных операторов Thymeleaf и представили несколько упрощенных примеров, показывающих различные варианты.

Примеры можно найти в проекте GitHub .