«1. Обзор

Thymeleaf — очень популярный движок шаблонов, поставляемый вместе с Spring Boot. Мы уже опубликовали ряд статей об этом и настоятельно рекомендуем ознакомиться с серией Baeldung’s Thymeleaf.

В этом уроке мы рассмотрим, как работать с тегами select и option в Thymeleaf.

2. Основы HTML

В HTML мы можем создать раскрывающийся список с несколькими значениями:

<select>
    <option value="apple">Apple</option>
    <option value="banana">Banana</option>
    <option value="orange">Orange</option>
    <option value="pear">Pear</option>
</select>

Каждый список состоит из тегов выбора и вложенных опций. По умолчанию веб-браузер отображает список с предварительно выбранным первым вариантом.

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

<option value="orange" selected>Orange</option>

Более того, мы можем указать, что опция не может быть выбрана, используя атрибут disabled:

<option disabled>Please select...</option>

3. Thymeleaf ~~ ~ В Thymleaf мы можем использовать атрибут th:field для привязки представления к модели:

Хотя приведенный выше пример на самом деле не требует использования механизма шаблонов, в более продвинутых примерах мы увидим всю мощь листа тимьяна.

<select th:field="*{gender}">
    <option th:value="'M'" th:text="Male"></option>
    <option th:value="'F'" th:text="Female"></option>
</select>

3.1. Опция без выбора

Если мы подумаем о сценарии, в котором есть больше опций для выбора, чистый и аккуратный способ отобразить их все — использовать атрибут th:each вместе с th:value и th:text: ~ ~~

В приведенном выше примере мы используем последовательность чисел от 0 до 100. Мы присваиваем значение каждого числа i атрибуту value тега option и используем то же число в качестве отображаемого значения.

<select th:field="*{percentage}">
    <option th:each="i : ${#numbers.sequence(0, 100)}" th:value="${i}" th:text="${i}">
    </option>
</select>

Код Thymeleaf будет отображаться в браузере как:

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

<select id="percentage" name="percentage">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    ...
    <option value="100">100</option>
</select>

3.2. Выбранный вариант

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

Мы можем добиться этого, добавив атрибут th:selected вместе с некоторым условием:

В приведенном выше примере мы хотим предварительно выбрать значение 75, проверив, равно ли i 75.

<select th:field="*{percentage}">
    <option th:each="i : ${#numbers.sequence(0, 100)}" th:value="${i}" th:text="${i}" 
      th:selected="${i==75}"></option>
</select>

Однако , этот код не будет работать, и отрендеренный HTML будет:

Чтобы исправить это, нам нужно удалить th:field и заменить его атрибутами name и id:

<select id="percentage" name="percentage">
    <option value="0">0</option>
    ...
    <option value="74">74</option>
    <option value="75">75</option>
    <option value="76">76</option>
    ...
    <option value="100">100</option>
</select>

В конце , мы получим:

<select id="percentage" name="percentage">

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

<select id="percentage" name="percentage">
    <option value="0">0</option>
    ...
    <option value="74">74</option>
    <option value="75" selected="selected">75</option>
    <option value="76">76</option>
    ...
    <option value="100">100</option>
</select>

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

Как всегда, код, использованный во время обсуждения, можно найти на GitHub.

«