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>
⚠️ 踩坑提示:确保 thymeleaf
和 thymeleaf-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 仓库。建议动手实践,这些特性在列表渲染场景中非常实用。