Thymeleaf简介
Thymeleaf是一个和Velocity、FreeMarker 类似的模板引擎,它在有网络和无网络的环境下皆可运行。因为它支持html原型,在html的标签里增加了额外的属性来达到模板+数据的展示方式。浏览器解释html时会忽略未定义的标签属性,所以thymeleaf的模板可以静态地运行。当有数据返回到页面时,Thymeleaf标签会动态地替换掉静态内容,使页面动态显示。
它与SpringBoot完美结合,SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器。它可以快速实现表单绑定、属性编辑器、国际化等功能。
在SpringBoot中的配置
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、创建模板文件夹
SpringBoot自动为Thymealf注册了一个视图解析器ThymealfViewResolver,并且配置了模板(HTML)的位置,与JSP类似的前缀+视图名+后缀的风格。我们可以进到它的配置文件(ThymeleafProperties)里去看:
可以发现,如果我们没有在yml
中进行配置,则它去找的视图文件默认是在resources
配置文件夹下的templates
文件夹里,后缀为.html
。我们也可以在配置文件中进行配置,即图中所标注的spring.thymeleaf
下。
yml配置文件
Controller层返回页面示例
Thymeleaf在Html页面中的基本
使用
1.要在html页面中使用thymeleaf的标签,必须引入名称空间。
<html lang="en" xmlns:th="http://www.thymeleaf.org">
2.表达式的使用
在html页面中,要使用thymealf的标签,只需在原标签名前加th:
即可,如th:src
、th:href
、th:text
等
①${}
,变量表达式,它可以获取到Controller层存入Model的值
// 后端Controller层代码
model.addAttribute("name","柳成荫");
User user = new User("柳成荫",22); // 姓名、年龄
model.addAttribute("user",user);
// html页面中获取并显示
<span th:text="${name}">九月</span>
<span th:text="${user.age}">18</span>
前面说过,当有数据传递过来时,则动态数据会替换静态数据。
②*{}
,选择变量表达式,可以省略对象名,直接获取属性值
<div th:object="${user}">
<p th:text="*{name}">九月</p>
<p th:text="*P{age}">18</p>
</div>
③#{}
,Message表达式,它主要是从国际化配置文件中取值,这里暂不做示例,文章后面将会示例从国际化配置文件中取值。
3、URL的使用
①绝对网址,绝对URL用于创建到其他服务器的链接,需要指定协议名称http
或者https
,如:
<a th:href="@{https://www.baidu.com}">百度</a>
②上下文相关URL,即与项目根相关联的URL,这里假设我们的war包为app.war,且没有在tomcat的server.xml
配置项目的路径(Context),则在Tomcat启动之后,就会在webapps文件下产生一个app文件夹,此时app
就是上下文路径(Context)
<!-- 在页面这样写 -->
<a th:href="@{/blog/search}">跳转</a>
<!-- Thymeleaf解析之后是这样的 -->
<a href="/app/blog/search">跳转</a>
③服务器相关URL,它与上下文路径很相似,它主要用于一个Tomcat下运行有多个项目的情况。比如说我们当前项目为app
,如果tomcat还运行着一个otherApp
,我们就可以通过该方法访问otherApp
的请求路径。
<!-- 在页面这样写 -->
<a th:href="@{~/otherApp/blog/search}">跳转</a>
<!-- Thymeleaf解析之后是这样的 -->
<a href="/otherApp/blog/search">跳转</a>
④有时候我们需要页面带参数传递到后端,则可以使用下面这个方法
<!-- 在页面这样写 -->
<a th:href="@{/blog/search(id=3,blogName='Java')}" >跳转</a>
<!-- Thymeleaf解析之后是这样的,这里忽略项目路径 -->
<a href="/blog/search?id=3&blogName=Java" >跳转</a>
<!-- 还可以这样写,实现restful风格的效果 -->
<a th:href="/blog/{id}/search(id=3&blogName=Java)">跳转</a>
<!-- Thymeleaf解析之后是这样的,这里忽略项目路径 -->
<a href="/bl