SpringBoot整合Thymeleaf
一、Thymeleaf 简介Thymeleaf 是一款现代化的服务器端 Java 模板引擎主要用于 Web 开发中渲染 HTML 页面能够无缝集成 Spring Boot 框架。它的核心优势是支持 HTML 原生语法模板文件可直接在浏览器中打开预览无后端数据时显示默认值与 Spring 生态深度整合是 Spring Boot 推荐的模板引擎支持多种表达式、条件判断、循环遍历等动态渲染能力无静态标签库语法简洁易懂。二、环境搭建Spring Boot 整合1. 依赖引入pom.xmlxmlproject xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.0/version /parent dependencies !-- Spring Web 核心依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Thymeleaf 核心依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thymeleaf/artifactId /dependency !-- Lombok可选简化实体类 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies /project2. 核心配置application.ymlyamlserver: port: 8080 spring: thymeleaf: cache: false # 开发环境关闭缓存修改页面无需重启服务三、Thymeleaf 基础语法1. 命名空间声明所有使用 Thymeleaf 的 HTML 页面需在html标签中声明命名空间否则 Thymeleaf 表达式无法生效html预览html langen xmlns:thhttp://www.thymeleaf.org2. 变量表达式${}作用从 Spring 容器的 Model 中获取后端传递的数据是最常用的表达式。示例后端传递数据Controllerjava运行package com.qcby.controller; import com.qcby.model.People; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import java.util.Arrays; import java.util.Date; Controller public class IndexController { GetMapping(/basic) public String basic(Model model) { // 构建实体类对象 People people new People(); people.setUsername(renliang); people.setAge(1); people.setSex(1); people.setIsVip(false); people.setBirthday(new Date()); people.setTags(Arrays.asList(PVP,Node,SUC)); // 将数据放入Modelkey为people model.addAttribute(people, people); return basic; // 跳转到templates下的basic.html } }前端渲染basic.htmlhtml预览!-- 直接获取对象属性 -- h2 th:text${people.username}/h2 p th:text${people.age}/p !-- 布尔类型判断 -- p th:if${people.isVip}会员/p3. 选择变量表达式*{}作用通过th:object指定根对象后简化属性获取无需重复写根对象名。示例html预览div th:object${people} !-- 等价于 ${people.username} -- h2 th:text*{username}/h2 !-- 等价于 ${people.age} -- p th:text*{age}/p /div4. 文本替换与拼接1字面量拼接|${}|适用于标题、描述等简单拼接场景html预览!-- 默认标题为默认标题后端传递title则替换为传递的值 -- title th:text|${title}|默认标题/title !-- 也可拼接固定文本 -- title th:text|用户中心 - ${people.username}|用户中心/title2无转义文本th:utextth:text会转义 HTML 标签如h1变为文本th:utext则保留原生 HTML 效果java运行// Controller 传递带HTML标签的文本 model.addAttribute(hello, h1zhangsan/h1);html预览!-- 显示为纯文本h1zhangsan/h1 -- div th:text${hello}/div !-- 显示为H1标题zhangsan -- div th:utext${hello}/div5. 条件判断th:if /th:unless作用根据条件动态渲染元素th:if满足条件显示th:unless满足条件隐藏与th:if相反。示例html预览!-- 基础条件判断 -- a th:href th:if${user.getAge() 2} 年龄等于2时显示/a !-- 多条件组合and/or/not -- p th:if${user.score 60 and user.score 85}B/p p th:if${user.score 60}C/p p th:if${user.score 85}优秀/p !-- th:unless 示例age不等于2时显示 -- a th:href th:unless${user.getAge() 2} 年龄不等于2时显示/a6. 分支选择th:switch /th:case作用类似 Java 的switch-case实现多分支条件渲染th:case*表示默认分支。示例html预览!-- 性别判断1男2女其他默认 -- div th:switch${people.sex} p th:case1男/p p th:case2女/p p th:case*默认/p /div !-- 简化版无默认分支 -- span th:switch${user.gender} p th:case1男/p p th:case2女/p /span7. 循环遍历th:each作用遍历集合List / 数组等渲染列表、表格等重复元素支持获取循环状态索引、是否第一个 / 最后一个等。基础示例遍历列表java运行// Controller 传递用户列表 ListUser uList new ArrayList(); for (int i 0; i 10; i){ User u new User(); u.setUsername(renliangi); u.setPassword(111i); uList.add(u); } model.addAttribute(uList, uList);html预览!-- 遍历uLista为每个元素aState为循环状态对象 -- table tr th:eacha,aState:${uList} td th:text${a.username}/td !-- 用户名 -- td th:text${a.password}/td !-- 密码 -- td th:text${aState.index}/td !-- 循环索引从0开始 -- /tr /table循环状态对象常用属性属性说明index索引从 0 开始count计数从 1 开始size集合总长度first是否为第一个元素booleanlast是否为最后一个元素booleaneven/odd是否为偶数 / 奇数索引boolean8. 动态属性th:attr / 直接绑定作用动态设置 HTML 标签的属性如 class、href、value 等推荐直接使用th:属性名方式更简洁。示例html预览!-- 动态设置input的value属性 -- input th:value${user.getUsername()} !-- 动态设置class三元表达式 -- a th:class${user.getAge() 2}?class1:class2 年龄/a !-- 动态设置href拼接URL -- a th:href{/user/detail(id${user.id})}用户详情/a四、核心注意事项缓存配置开发环境务必关闭 Thymeleaf 缓存spring.thymeleaf.cachefalse否则修改页面后需重启服务才能生效生产环境建议开启缓存提升性能。表达式语法调用对象方法时需注意参数和返回值如user.getAge()而非user.age()因 Lombok 生成的 getter 方法是getAge()布尔类型判断直接使用${对象.布尔属性}如${people.isVip}无需加 true。模板位置Spring Boot 中 Thymeleaf 模板默认放在src/main/resources/templates目录下Controller 返回的字符串直接对应模板文件名无需加.html。命名空间必须在html标签声明xmlns:thhttp://www.thymeleaf.org否则 Thymeleaf 表达式不会被解析。五、完整示例流程编写实体类如 People、User使用 Lombok 的Data简化 getter/setter编写 Controller通过Model传递数据到模板编写 Thymeleaf 模板使用上述语法渲染数据启动 Spring Boot 应用访问对应接口如/basic、/success查看渲染效果。例如访问http://localhost:8080/basic可看到 People 对象的用户名、年龄、标签列表等数据被动态渲染到页面中访问http://localhost:8080/success可看到用户列表、条件判断、动态属性等效果。

相关新闻

Spring Boot 配置文件核心用法与加载优先级

Spring Boot 配置文件核心用法与加载优先级

2026/7/8 18:16:27 阅读更多 →
SpringBoot中多配置文件和外部配置文件加载顺序

SpringBoot中多配置文件和外部配置文件加载顺序

2026/7/8 12:15:22 阅读更多 →
@PropertySource@ImportResource@Bean

@PropertySource@ImportResource@Bean

2026/7/8 14:21:44 阅读更多 →

最新新闻

Python编码解码全解析

Python编码解码全解析

Python编码解码详解 一、核心概念与原理 1.1 编码与解码的本质区别 操作方向输入输出方法编码字符串 → 字节Unicode字符串字节序列str.encode()解码字节 → 字符串字节序列Unicode字符串bytes.decode() 编码是将人类可读的文本(字符串)转换为计算机…

2026/7/9 5:31:14 阅读更多 →
NAND Flash 硬件电路设计 3 大实战:全志H3、ZYNQ、HI3798 平台对比

NAND Flash 硬件电路设计 3 大实战:全志H3、ZYNQ、HI3798 平台对比

NAND Flash硬件电路设计实战:全志H3、ZYNQ与海思HI3798平台深度对比在嵌入式系统设计中,NAND Flash作为主流存储方案,其硬件电路设计直接影响系统稳定性和性能表现。本文将针对全志H3、Xilinx ZYNQ和海思HI3798三大主流SoC平台,从…

2026/7/9 5:31:14 阅读更多 →
0402/0603/0805贴片电阻:5种封装功率曲线与PCB布局散热实测

0402/0603/0805贴片电阻:5种封装功率曲线与PCB布局散热实测

0402/0603/0805贴片电阻:功率曲线与PCB散热设计实战指南 当你在高密度PCB上布局一颗0402封装的贴片电阻时,是否思考过它微小的身躯如何应对电流通过时产生的热量?现代电子设备正朝着更小体积、更高性能的方向发展,这对电路设计中的…

2026/7/9 5:29:13 阅读更多 →
第一次用TMGM 官方版 MT5 系统,界面怎么调才不抓瞎?

第一次用TMGM 官方版 MT5 系统,界面怎么调才不抓瞎?

刚打开软件,看着密密麻麻的英文和花花绿绿的图表,是不是整个人都懵了?别怕,今天就教你几招,把这个TMGM 官方版 MT5 系统(mt5-get.com)调整得清清爽爽,让你一眼就能看懂。第一步&…

2026/7/9 5:27:13 阅读更多 →
CUDA 13.1 + PyTorch 2.10 环境搭建:RTX 5060 Ti 显卡兼容性验证与 2 个关键配置

CUDA 13.1 + PyTorch 2.10 环境搭建:RTX 5060 Ti 显卡兼容性验证与 2 个关键配置

CUDA 13.1 PyTorch 2.10 环境搭建:RTX 5060 Ti 显卡兼容性实战指南当RTX 5060 Ti遇上PyTorch 2.10,看似简单的环境搭建却暗藏玄机。许多开发者在全新硬件上配置深度学习环境时,常被sm_120 is not compatible警告或torch.cuda.is_available()…

2026/7/9 5:23:12 阅读更多 →
计算机毕业设计之基于SSM框架的爱鑫助农脱贫平台系统设计与实现

计算机毕业设计之基于SSM框架的爱鑫助农脱贫平台系统设计与实现

随着世界经济信息化、全球化的到来和互联网的飞速发展,推动了各行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、动态的、交互友好的、高效的爱鑫助农脱贫平台系统。当前的信息管理存在工作…

2026/7/9 5:23:12 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻