当前位置: 首页 > news >正文

Thymeleaf 基础语法与标准表达式详解

关键词:Thymeleaf、Spring Boot、HTML 模板引擎、标准表达式、文本替换、条件判断、循环遍历


✅ 引言

在 Spring Boot 项目中,Thymeleaf 是一个非常流行且功能强大的服务器端 HTML 模板引擎。它支持自然模板(Natural Templates),即即使不运行后端也能直接在浏览器中查看页面效果。

本文将围绕 Thymeleaf 的基础语法与标准表达式 进行系统讲解,涵盖变量替换、条件判断、循环遍历、URL 处理、属性操作等核心知识点,并为每个小节提供完整的 HTML + Java 后端示例代码,帮助你快速上手 Thymeleaf 开发。


📌 一、Thymeleaf 简介与基本使用

1.1 引入依赖(Spring Boot 项目)

<!-- pom.xml -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

1.2 控制器返回视图名称

// HelloController.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping("/hello")public String sayHello(Model model) {model.addAttribute("message", "Hello, Thymeleaf!");return "hello"; // 对应 templates/hello.html}
}

1.3 Thymeleaf 页面结构(hello.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Hello Thymeleaf</title>
</head>
<body><h1 th:text="${message}">默认标题</h1>
</body>
</html>

📌 访问 /hello 输出结果:

Hello, Thymeleaf!

📌 二、标准表达式类型详解

Thymeleaf 支持多种表达式,常见的有:

表达式描述
${...}变量表达式(用于获取模型数据)
*{...}选择变量表达式(适用于对象内部字段访问)
#{...}消息表达式(国际化支持)
@{...}链接 URL 表达式
~{...}片段表达式(用于引入其他模板片段)

📌 三、变量表达式 ${...}

示例代码

<p th:text="${'当前时间是:' + #dates.format(now, 'yyyy-MM-dd HH:mm:ss')}">时间</p>

后端传参:

model.addAttribute("now", new java.util.Date());

📌 输出效果:

当前时间是:2025-07-16 17:34:00

📌 四、选择变量表达式 *{...}

当对象上下文已知时使用,例如:

User user = new User("张三", 25);
model.addAttribute("user", user);
<div th:object="${user}"><p>姓名:<span th:text="*{name}"></span></p><p>年龄:<span th:text="*{age}"></span></p>
</div>

📌 输出结果:

姓名:张三
年龄:25

📌 五、消息表达式 #{...}(国际化支持)

5.1 定义消息文件(src/main/resources/messages.properties)

welcome.message=欢迎访问我们的网站!

5.2 使用消息表达式

<h2 th:text="#{welcome.message}">Welcome Message</h2>

📌 输出结果:

欢迎访问我们的网站!

📌 六、链接表达式 @{...}(生成 URL)

示例代码

<a th:href="@{/user/{id}(id=${user.id})}">查看详情</a>

user.id = 1001,则输出:

<a href="/user/1001">查看详情</a>

📌 七、片段表达式 ~{...}(模块化复用)

7.1 定义公共片段(fragments.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:fragment="common_header"><meta charset="UTF-8"><title>公共头部</title>
</head>
</html>

7.2 引用片段

<div th:insert="~{fragments :: common_header}"></div>

📌 八、条件判断 th:if / th:unless

示例代码

<p th:if="${user.age >= 18}">您已成年。</p>
<p th:unless="${user.age >= 18}">您未成年。</p>

根据 user.age = 25 输出:

您已成年。

📌 九、循环遍历 th:each

示例代码(后端传 List)

List<String> fruits = Arrays.asList("苹果", "香蕉", "橙子");
model.addAttribute("fruits", fruits);
<ul><li th:each="fruit : ${fruits}" th:text="${fruit}"></li>
</ul>

📌 输出 HTML:

<ul><li>苹果</li><li>香蕉</li><li>橙子</li>
</ul>

📌 十、属性设置 th:attr 与快捷方式

10.1 设置任意属性

<input type="text" th:attr="placeholder=#{form.name}" />

10.2 快捷写法(推荐)

<input type="text" th:placeholder="#{form.name}" />

✅ 总结

表达式用途示例
${...}获取变量值th:text="${message}"
*{...}从对象中取值th:text="*{name}"
#{...}国际化消息th:text="#{welcome.message}"
@{...}构建 URLth:href="@{/user/{id}(id=1)}"
~{...}引入模板片段th:insert="~{fragments :: header}"
th:if条件渲染th:if="${user.isAdmin}"
th:each循环处理th:each="item : ${items}"
th:attr动态设置属性th:attr="data-id=${id}"

📚 推荐阅读

  • Thymeleaf 官方文档
  • Spring Boot 中 Thymeleaf 的最佳实践
  • Thymeleaf + Bootstrap 实现动态表格
http://www.lryc.cn/news/589711.html

相关文章:

  • [Linux入门] Linux 账号和权限管理入门:从基础到实践
  • 如何通过扫描电镜检测汽车清洁度中的硬质颗粒并获取成分信息
  • 【云原生网络】Istio基础篇
  • 数字IC后端培训教程之数字IC后端项目典型问题解析
  • 轻松将文件从 iPhone 传输到 Mac
  • 记一次大数据量表数据分表
  • 【世纪龙科技】汽车发动机拆装检修仿真教学软件-仿真精进技能
  • 汽车功能安全-在系统层面验证TSR实例
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 5 月产品动态
  • 【龙泽科技】新能源汽车电驱动总成装调与检修仿真教学软件
  • Excel 导入导出工具类文档
  • 维基艺术图片: 对比模型, 小模型 vs 大模型 (4)
  • 【Unity】Mono相关理论知识学习
  • linux服务器traffic control的使用
  • RAG的文档问答系统-PYTHON
  • 微信小程序141~150
  • Swift 条件语句
  • Excel转PDF的三种方法
  • 【iOS】源码阅读(六)——方法交换
  • 数字魔方--玩转魔方的助手
  • 跟着Nature正刊学作图:回归曲线+散点图
  • Promise与Axios:异步编程
  • 基于CentOS的分布式GitLab+Jenkins+Docker架构:企业级CI/CD流水线实战全记录
  • MySQL 8.0 OCP 1Z0-908 题目解析(27)
  • WAN技术
  • ollama快速部署使用(windows版)
  • 【Java】【力扣】101.对称二叉树
  • Spring之核心容器(IoC,DI,基本操作)详解
  • 中国旅行社协会在京召开“文旅人工智能应用研讨会”,助力文旅创新发展
  • python —— 真二