Рубрики
Без рубрики

Итерация в Thymeleaf

Узнайте, как использовать итерацию с Thymeleaf, используя атрибут th:each.

Автор оригинала: baeldung.

1. Обзор

Thymeleaf – это универсальный Java-шаблонный движок для обработки документов XML, XHTML и HTML5 .

В этом кратком руководстве мы рассмотрим, как мы можем выполнять итерации с помощью Thymeleaf, а также некоторые другие функции, предоставляемые библиотекой.

Для получения дополнительной информации о Thymeleaf ознакомьтесь с нашей вводной статьей здесь .

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

Для создания этого примера мы будем использовать библиотеки Spring Framework вместе с библиотеками Thymeleaf.

Здесь мы можем увидеть наши зависимости ( thymeleaf и thymeleaf-spring ):


    org.thymeleaf
    thymeleaf
    3.0.11.RELEASE


    org.thymeleaf
    thymeleaf-spring5
    3.0.11.RELEASE

3. Пример настройки

Прежде чем перейти к слою представления, давайте создадим структуру MVC для нашего примера.

Начиная с фрагмента кода слоя модели:

public class Student implements Serializable {
    private Integer id;
    private String name;
    // standard contructors, getters, and setters
}

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

@GetMapping("/listStudents")
public String listStudent(Model model) {
    model.addAttribute("students", StudentUtils.buildStudents());
    return "listStudents.html";
}

В нашем примере выше метод build Students() просто возвращает список объектов Student , которые мы затем добавляем в модель .

4. Й:каждый Атрибут

В Thymeleaf итерация достигается с помощью атрибута th:each .

Одна из интересных вещей в этом атрибуте заключается в том, что он будет принимать и перебирать некоторые различные типы данных , такие как:

  • объекты, реализующие java.util.Итерируемый
  • объекты, реализующие java.util.Map
  • массивы
  • любой другой объект рассматривается как однозначный список, содержащий один элемент

Теперь давайте вызовем атрибут th:each с данными, которые мы настроили в нашем примере выше:


    
    

Фрагмент кода показывает th:каждый перебирает наш список Студентов . Доступ к атрибуту модели осуществляется с помощью нотации $ {} , и каждый элемент списка передается в тело цикла через переменную student .

5. Переменная состояния

Thymeleaf также включает полезный механизм для отслеживания итерационного процесса с помощью переменной состояния .

Переменная status предоставляет следующие свойства:

  • index : текущий индекс итерации, начинающийся с 0 (ноль)
  • count : количество элементов, обработанных до сих пор
  • size : общее количество элементов в списке
  • even/odd : проверяет, является ли текущий индекс итерации четным или нечетным
  • first : проверяет, является ли текущая итерация первой
  • last : проверяет, является ли текущая итерация последней

Давайте посмотрим, как работает переменная состояния в нашем примере:


    
    

Здесь мы включили свойство iStat.odd для оценки условия и установки полужирного стиля для текущей строки. То же самое делается и при следующей оценке, но на этот раз мы используем iStat.even для печати значения через HTML-атрибут alt/title.

В случае, если мы опустим явное создание переменной состояния (представленной в нашем примере как iStat ), мы могли бы вызвать нашу переменную состояния, просто используя studentStat , которая является агрегацией переменной student с суффиксом Stat.

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

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

Мы представили итерацию в Thymeleaf с помощью атрибута th:each вместе с его готовыми свойствами.

Рабочая версия кода, показанная в этой статье, доступна в нашем репозитории GitHub .