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:ifth:unless 属性控制整个 HTML 元素的渲染:

<td>
    <span th:if="${teacher.gender == 'F'}">Female</span>
    <span th:unless="${teacher.gender == 'F'}">Male</span>
</td>

teacher.genderF 时渲染 Female,否则渲染 Male
⚠️ 本质等同于编程语言中的 if-else 结构。

3.3. Switch – Case

当表达式存在多种可能结果时,使用 th:switchth: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 项目 中获取。


原始标题:Conditionals in Thymeleaf

« 上一篇: JVM语言概览