1.1 介绍
官方文档:thymeleaf-spring整个时的thymeleaf文档
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#expression-basic-objects
Thymeleaf
是用来开发
Web
和独立环境项目的现代服务器端
Java
模板引擎。
Thymeleaf
的主要目标是为您的开发工作流程带来优雅的
自然模板
- HTML
。可以在直接浏览器中正确显示,并且可以作为静态原型,从而在开发团队中实现更强大的协作。
借助
Spring Framework
的模块,可以根据自己的喜好进行自由选择,可插拔功能组件,
Thymeleaf
是现代 HTML5 JVM Web开发的理想选择
-
尽管它可以做的更多 。
Spring
官方支持的服务的渲染模板中,并不包含
jsp
。而是
Thymeleaf
和
Freemarker
等,而
Thymeleaf
与 SpringMVC的视图技术,及
SpringBoot
的自动化配置集成非常完美,几乎没有任何成本,你只用关注Thymeleaf的语法即可。
特点:
动静结合:
Thymeleaf
在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态 效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html
原型,然后在
html 标签里增加额外的属性来达到模板+
数据的展示方式。浏览器解释
html
时会忽略未定的标签属性, 所以 thymeleaf
的模板可以静态地运行;当有数据返回到页面时,
Thymeleaf
标签会动态地替换掉静 态内容,使页面动态显示。
开箱即用:它提供标准和
spring
标准两种方言,可以直接套用模板实现
JSTL
、
OGNL
表达式效果,避免 每天套模板、该jstl
、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
多方言支持:
Thymeleaf
提供
spring
标准方言和一个与
SpringMVC
完美集成的可选模块,可以快速的 实现表单绑定、属性编辑器、国际化等功能。
与
SpringBoot
完美整合,
SpringBoot
提供了
Thymeleaf
的默认配置,并且为
Thymeleaf
设置了视图解 析器,我们可以像以前操作jsp
一样来操作
Thymeleaf
。代码几乎没有任何区别,就是在模板语法上有区别。
1.2 基本设置
1.2.1 创建环境
勾选
web
和
Thymeleaf
的依赖:
1.2.2 默认配置
不需要做任何配置,启动器已经帮我们把
Thymeleaf
的视图器配置完成:
而且,还配置了模板文件(html)的位置,与jsp类似的前缀+ 视图名 + 后缀风格:
默认前缀: classpath:/templates/
默认后缀:
.html
所以如果我们返回视图:
users
,会指向到
classpath:/templates/users.html
Thymeleaf
默认会开启页面缓存,提高页面并发能力。但会导致我们修改页面不会立即被展现,因此我们关闭缓存:
# 关闭Thymeleaf的缓存
spring.thymeleaf.cache=false
另外,修改完毕页面,需要使用快捷键:
Ctrl + Shift + F9
来刷新工程。
1.2.3 快速开始
我们准备一个controller,控制视图跳转:
@Controller
public class HelloController {
@GetMapping("show1")
public String show1(Model model){
model.addAttribute("msg", "Hello, Thymeleaf!");
return "hello";
}
}
新建一个
html
模板:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
<h1 th:text="${msg}">大家好</h1>
</body>
</html>
注意
,把
html
的名称空间,改成:
xmlns:th="http://www.thymeleaf.org"
会有语法提示
启动项目,访问页面:
1.3 语法
Thymeleaf
的主要作用是把
model
中的数据渲染到
html
中,因此其语法主要是如何解析
model
中的数据。从以下方面来学习:
1.变量
2.方法
3.条件判断
4.循环
5.运算
6.逻辑运算
7.布尔运算
8.比较运算
9.条件运算
1..3.1 变量
我们先新建一个实体类:
User
public class User {
String name;
int age;
User friend;// 对象类型属性
}
然后在模型中添加数据
@GetMapping("show2")
public String show2(Model model){
User user = new User();
user.setAge(21);
user.setName("Jack Chen");
user.setFriend(new User("李小龙", 30));
model.addAttribute("user", user);
return "show2";
}
语法说明:
Thymeleaf
通过
${}
来获取
model
中的变量,注意这不是
el
表达式,而是
ognl
表达式,但是语法非常像。
示例:
我们在页面获取
user
数据: