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

Работа с перечислениями в Thymeleaf

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

1. Введение

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

Мы начнем с перечисления значений перечисления в раскрывающемся списке. После этого мы рассмотрим использование нашего перечисления для управления потоком данных в наших шаблонах.

2. Настройка

Давайте начнем с добавления стартера Spring Boot для Thymeleaf в наш файл pom.xml :

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<versionId>2.2.2.RELEASE</versionId>
</dependency>

Мы будем работать с виджетами, у которых есть несколько вариантов цвета, поэтому давайте определим наше перечисление Color :

public enum Color {
BLACK, BLUE, RED, YELLOW, GREEN, ORANGE, PURPLE, WHITE
}

Теперь давайте создадим наш класс Widget :

public class Widget {
private String name;
private Color color;

// Standard getters/setters
}

3. Отображение перечислений в раскрывающемся меню

Давайте используем select и option для создания раскрывающегося списка, в котором используется наше перечисление Color :

<select name="color">
<option th:each="colorOpt : ${T(com.foreach.thymeleaf.model.Color).values()}"
th:value="${colorOpt}" th:text="${colorOpt}"></option>
</select>

Оператор T является частью языка выражений Spring для указания экземпляра класса или доступа к статическим методам.

Если мы запустим наше приложение и перейдем на страницу ввода нашего виджета, мы увидим все наши цвета в раскрывающемся списке « Цвет »:

./0dd2b61b26a6d2da87c69d2e942c81bf.jpg

Когда мы отправим нашу форму, наш объект Widget будет заполнен выбранным цветом:

./cee5999f5448bd2e0454499381d765a9.jpg

4. Использование отображаемого имени

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

Мы начнем с изменения нашего перечисления Color , чтобы предоставить отображаемое имя:

public enum Color {
BLACK("Black"),
BLUE("Blue"),
RED("Red"),
YELLOW("Yellow"),
GREEN("Green"),
ORANGE("Orange"),
PURPLE("Purple"),
WHITE("White");

private final String displayValue;

private Color(String displayValue) {
this.displayValue = displayValue;
}

public String getDisplayValue() {
return displayValue;
}
}

Затем давайте перейдем к нашему шаблону Thymeleaf и обновим раскрывающийся список, чтобы использовать новое displayValue :

<select name="color">
<option th:each="colorOpt : ${T(com.foreach.thymeleaf.model.Color).values()}"
th:value="${colorOpt}" th:text="${colorOpt.displayValue}"></option>
</select>

Наш раскрывающийся список теперь отображается с более читаемыми названиями цветов:

./a8257f05e5a263ccf76fa9788de8e41a.jpg

5. Операторы if

Иногда мы можем захотеть изменить то, что мы показываем, на основе значений перечисления. Мы можем использовать наше перечисление Color с условными операторами Thymeleaf .

Давайте представим, что у нас есть мнения о некоторых возможных цветах виджета.

Мы можем использовать оператор Thymeleaf if с нашим перечислением Color для условного отображения текста:

<div th:if="${widget.color == T(com.foreach.thymeleaf.model.Color).RED}">
This color screams danger.
</div>

Другой вариант - использовать сравнение строк :

<div th:if="${widget.color.name() == 'GREEN'}">
Green is for go.
</div>

6. Операторы Switch-Case

В дополнение к операторам if Thymeleaf поддерживает оператор switch-case .

Давайте используем оператор switch-case с нашим перечислением Color :

<div th:switch="${widget.color}">
<span th:case="${T(com.foreach.thymeleaf.model.Color).RED}"
style="color: red;">Alert</span>
<span th:case="${T(com.foreach.thymeleaf.model.Color).ORANGE}"
style="color: orange;">Warning</span>
<span th:case="${T(com.foreach.thymeleaf.model.Color).YELLOW}"
style="color: yellow;">Caution</span>
<span th:case="${T(com.foreach.thymeleaf.model.Color).GREEN}"
style="color: green;">All Good</span>
</div>

Если мы введем оранжевый виджет, мы должны увидеть предупреждение:

./611ac0bc1a239da25523d262641aabd2.jpg

7. Заключение

В этом руководстве мы начали с использования Thymeleaf для создания раскрывающегося списка с использованием перечисления Color , которое мы определили в нашем приложении. Оттуда мы узнали, как сделать выпадающие отображаемые значения более читабельными.

После прохождения стороны ввода с помощью раскрывающегося списка мы перешли к стороне вывода и узнали, как работать с перечислениями в управляющих структурах. Мы использовали операторы if и switch-case для обработки некоторых элементов на основе нашего перечисления Color .

Полный пример доступен на GitHub .