1. 概述
本教程将深入探讨 Thymeleaf 中可用的各类条件判断机制。
关于 Thymeleaf 的快速入门,可参考这篇文章。
2. Maven 依赖
首先列出与 Spring 集成 Thymeleaf 所需的 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>
⚠️ 注意:
- 需根据 Spring 版本选择对应的
thymeleaf-springX
库(X
代表 Spring 版本号) - Thymeleaf 从
3.0.8.RELEASE
开始支持 Spring 5
最新版本可在此处查询。
3. Thymeleaf 条件判断
需区分两类条件判断:
✅ 元素内容条件渲染:控制 HTML 元素内部的文本显示
✅ 元素存在性条件渲染:控制整个 HTML 元素的实例化
先定义本文使用的 Teacher
模型类:
public class Teacher implements Serializable {
private String gender;
private boolean isActive;
private List<String> courses = new ArrayList<>();
private String additionalSkills;
3.1. Elvis 运算符
Elvis 运算符 ?:
用于根据变量状态动态渲染 HTML 元素内的文本。
默认值处理
当变量为 null
时显示默认文本:
<td th:text="${teacher.additionalSkills} ?: 'UNKNOWN'" />
若 teacher.additionalSkills
有值则显示其内容,否则显示 UNKNOWN
。
条件分支
根据布尔表达式显示不同文本:
<td th:text="${teacher.active} ? 'ACTIVE' : 'RETIRED'" />
支持多种比较操作:
> (gt)
、>= (ge)
< (lt)
、<= (le)
== (eq)
、!= (ne)
3.2. If – Unless
th:if
和 th:unless
属性控制整个 HTML 元素的渲染:
<td>
<span th:if="${teacher.gender == 'F'}">Female</span>
<span th:unless="${teacher.gender == 'F'}">Male</span>
</td>
当 teacher.gender
为 F
时渲染 Female
,否则渲染 Male
。
⚠️ 本质等同于编程语言中的 if-else
结构。
3.3. Switch – Case
当表达式存在多种可能结果时,使用 th:switch
和 th:case
实现多分支渲染:
<td th:switch="${#lists.size(teacher.courses)}">
<span th:case="'0'">NO COURSES YET!</span>
<span th:case="'1'" th:text="${teacher.courses[0]}"></span>
<div th:case="*">
<div th:each="course:${teacher.courses}" th:text="${course}"/>
</div>
</td>
根据 teacher.courses
列表大小:
0
:显示默认提示1
:显示单个课程- 其他:遍历显示所有课程
⚠️ 星号*
表示默认分支。
4. 总结
本文系统梳理了 Thymeleaf 的条件判断机制,并通过简化示例展示了各类用法。
完整示例代码可在 GitHub 项目 中获取。