1.什么是Thymeleaf
Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发,它是一个开源的Java库。Thymeleaf提供了一个用于整合Spring MVC的可选模块,Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板,它的特点便是:开箱即用。
2.Springboot整合thymeleaf
实现的步骤为:
1. 创建一个sprinboot项目
2. 添加thymeleaf的起步依赖
3. 添加spring web的起步依赖
4. 编写html 使用thymleaf的语法获取变量对应后台传递的值
5. 编写controller 设置变量的值到model中
pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
创建application.yml,并设置thymeleaf的缓存设置,设置为false。
1 | spring: |
在resources中创建templates目录,在templates目录创建index.html,代码如下:
1 | <!doctype html> |
<html xmlns:th="http://www.thymeleaf.org">这句声明使用thymeleaf标签<title th:text="${title}">默认的标题</title>这句使用 th:text=”${变量名}” 表示 使用thymeleaf获取文本数据,类似于EL表达式。
<title th:text="|lookroot-${title}|">默认的标题</title>假如我们的 th:text 标签里面需要拼接字符串${title}可以使用||来包裹
创建controller用于测试后台 设置数据到model中。
1 |
|
Thymeleaf常用语法

渲染对象
创建一个基本对象UserVO
1 |
|
新建一个方法basic,将user对象传输到页面中
1 |
|
新建basic.html,此时如果我们想渲染User这个对象的信息我们可以这样
1 | <div> |
也可以将User定义为临时变量,接着使用*{xxx}就能取到值了
1 | <div th:object="${user}"> |
还可以不使用get的方式,直接使用属性名
1 | <h2 th:text="${user.username}" ></h2> |
th:if使用
th:if通过布尔值决定这个元素是否渲染
1 | <p th:if="${user.isVip}">会员</p> |
th:each使用
th:each可以迭代循环出数据,前面我们User对象里面的tags是一个数组,我们来渲染一下
1 | <ul> |
状态变量在th:each属性中定义,并且包含以下数据:
当前的迭代索引,从0开始。这是index属性。.
从1开始的当前迭代索引。这是count属性。
迭代变量中元素的总数。这是size财产。
每次迭代的iter变量。这是current财产。
当前迭代是偶数还是奇数。这些是even/odd布尔属性。
当前迭代是否是第一个。这是first布尔属性。
当前迭代是否为最后一次。这是last布尔属性
th:switch使用
th:switch选择语句
1 | <div th:switch="${user.getSex()}"> |
url
如果在springboot中需要引入static目录下的静态资源可以使用@{xxx}的方式
1 | <link th:href="@{/app.css}" rel="stylesheet"> |
JavaScript动态渲染
1 | <script th:inline="javascript"> |
同理css也是可以的
1 | <style th:inline="css"> |
Thymeleaf碎片(组件)
th:fragment
新建一个component.html,一个文件里面可以写多个碎片,使用th:fragment来定义
1 | <footer th:fragment="com1"> |
使用碎片主要有两种方式replace和insert,在index.html中编写
1 | <!--replace--> |
这两种方式的区别就是,replace会将新标签完全替换原本的标签,也就是说原本写th:replace属性的标签就不会渲染出来,insert是往这个地方插入标签
直接通过选择器使用
对于碎片,甚至可以不定义,我们再次添加一个 碎片
1 | <footer id="com2"> |
然后使用它
1 | <div th:insert="~{component::#com2}"></div> |
注释类型
在碎片里面,我们是可以使用控制传递的数据的,比如上面的User对象,但是开发工具在component.html页面中可能不能识别到User对象,我们可以打一个注释
1 | <!--/*@thymesVar id="user" type="cn.lookroot.loop.thymeleafdemo.vo.UserVO"*/--> |
组件传递参数
组件也是可以传递数据的
1 | <div th:fragment="com3(message)"> |
使用的时候
1 | <div th:insert="~{component::com3('传递数据')}"></div> |
局部替换组件
我们使用一个组件的时候,想要局部替换掉这个组件里面的部分内容该怎么做呢?通过传递参数的方式传递一个组件过来,并把这个组件替换原本的一部分
1 | <div th:fragment="com4(message)"> |
使用的时候
1 | <div th:insert="~{component::com4(~{::#message})}"> |
基本对象
ctx:上下文对象
1 | ${#ctx.request} |
请求/会话属性
1 | ${session.xxx} |
工具类
在thymeleaf里面是可以直接使用一些Java的函数的,并且你可以通过传递参数的方式把一些自己写的方法传递给页面,在里面调用也是可以的
#dates
#calendars
#strings
#numbers
#objects
#bools
#arrays
#lists
#sets
#maps
#aggregates
以日期格式化来举例
1 | <!--日期格式化--> |