1. 概述

Thymeleaf 是一款功能强大的 Java 模板引擎,专门用于处理 XML、XHTML 和 HTML5 文档。

本文将深入探讨 Thymeleaf 的迭代机制,并附带一些实用特性。想了解 Thymeleaf 基础?可以参考我们的入门教程

2. Maven 依赖

构建示例需要以下核心依赖(注意版本匹配):

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

⚠️ 踩坑提示:确保 thymeleafthymeleaf-spring5 版本一致,否则可能引发兼容性问题。

3. 示例搭建

先快速搭建 MVC 结构。模型层代码如下:

public class Student implements Serializable {
    private Integer id;
    private String name;
    // 标准构造器、getter/setter 省略
}

控制器负责加载数据并传递给视图:

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

这里 buildStudents() 返回 Student 列表,通过 model 传递给视图层——这是 Spring MVC 的标准操作,老驱动都懂。

4. th:each 属性详解

Thymeleaf 的迭代核心是 th:each 属性。它支持多种数据类型:

支持的数据类型

  • 实现 java.util.Iterable 的对象
  • 实现 java.util.Map 的对象
  • 数组
  • 其他对象会被当作单元素列表处理

基础用法示例:

<tr th:each="student: ${students}">
    <td th:text="${student.id}" />
    <td th:text="${student.name}" />
</tr>

关键点解析:

  • ${students} 通过 ${} 语法访问模型属性
  • 每个迭代元素通过 student 变量注入循环体
  • 简单粗暴,但高效实用

5. 状态变量进阶

Thymeleaf 提供状态变量跟踪迭代过程,包含以下实用属性:

属性 说明
index 当前迭代索引(从 0 开始)
count 已处理元素数量
size 列表总元素数
even/odd 当前索引是否为偶数/奇数
first 是否首次迭代
last 是否末次迭代

实战示例:

<tr 
  th:each="student, iStat : ${students}" 
  th:style="${iStat.odd}? 'font-weight: bold;'" 
  th:alt-title="${iStat.even}? 'even' : 'odd'">
    <td th:text="${student.id}" />
    <td th:text="${student.name}" />
</tr>

技巧

  • iStat.odd 控制行样式(奇数行加粗)
  • iStat.even 动态设置 HTML 属性
  • 省略状态变量名时,可用 studentStat 代替(变量名+Stat 后缀)

6. 总结

本文系统梳理了 Thymeleaf 的迭代机制:

  • th:each 是迭代核心,支持多种数据类型
  • 状态变量提供精细控制能力
  • 实际开发中结合条件判断能实现复杂视图逻辑

完整代码示例见 GitHub 仓库。建议动手实践,这些特性在列表渲染场景中非常实用。


原始标题:Iteration in Thymeleaf | Baeldung

» 下一篇: Primefaces 入门指南