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 .