这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战
了解Thymeleaf
Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。
Thymeleaf旨在提供一个优雅的、高度可维护的创建模板的方式。为了实现这一目标,Thymeleaf建立在自然模板的概念上,将其逻辑注入到模板文件中,不会影响模板设计原型。这改善了设计的沟通,弥合了设计和开发团队之间的差距。
Thymeleaf从设计之初就遵循Web标准-----特别是HTML5标准,如果需要,Thymeleaf允许您创建完全符合HTML5验证标准的模板。
SpringBoot体系内推荐使用Thymeleaf作为前端压面模板,并且SpringBoot2.0中默认使用Thymeleaf3.0,性能提升幅度很大。
Thymeleaf的特点
- Thymeleaf 在不管是否连接服务器的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。
- Thymeleaf开箱即用的特性,避免每天套模板、改JSTL、OGNL表达式效果,避免每天套模板、改JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
- Thymeleaf提供Spring标准方言和一个与SpringMVC完美集成的可选模块,可以快速地实现表单绑定、属性编辑器、国际化等功能。
Thymeleaf在Springboot下的快速入门
这里是step 7
操作部分,新建一个项目,写一个controller ,模板文件下 放入一个参数 。
Thymeleaf基本语法
th属性
- 文本属性
- 文本拼接 : || 所有的内容都在两个| 中间
- 文本信息 : th:text , th:id , th:value ....
- 文本信息(可以解析HTML各位) : th:utext
新建一个controller ,传递对象用modelMap ,id, value ,text 。
新建一个text.html 用th 标签来哦新家
- 条件属性
- if判断:th:if
- unless 判断 : th:unless ,相对于if 的意思 是取反
- switch 判断 : th:switch .... th:case
新建一个controller ,传递对象用modelMap: flag, baidu ,taobao , age 。
新建一个if.html 用th:if 标签来判断
- 循环属性 th:each
- th: each迭代list
- th: each的内置属性
- th: each迭代map
Thymeleaf的表达式语法
- ${...} 变量表达式 :也叫OGNL 表达式或Spring EL 表达式,用于调用各种属性和方法
-
可以获取对象的属性和方法
-
可以使用ctx,vars,locale,request,response,sess,servletContext内置对象
-
可以使用dates,nymbers,strings,objects,arrays,lists,sets,maps等内置方法
- @{...}链接表达式:不管是静态资源的引用,form表单的请求,凡是链接都可以用@{...}
-
无参 : @{/xxx}
-
有参 : @{/xxx{(k1=v1,k2=v2)} ,对应 url结构 :xxx?k1=v1&k2=v2
-
引入本地资源 : @{/项目本地的资源路径}
-
引入外部资源 : @{/webjars/资源在jar包中的路径}
- #{...}消息表达式:用于从消息源中提取消息内容实现国际化
-
语法和变量表达式相比多了个获取参数的方式
-
消息源主要是properties文件
- ~{...}代码块表达式:把某一段定义好的代码块插入到另外一个页面中,一般用于定义出一套通用的header或者是footer
- 语法:
{templatename::fragmentname}或者{templatename::#id},如果省略templatename,它将在当前页面进行寻找指定的代码块,注意~{}可以省略
-
templatename : 模板名,定义模板的写法 :
-
fragmentname : 片段名,引入模板的写法 :
-
id:HTML的id选择器,使用时要在前面加上#号,不支持class选择器
- 代码块表达式需要配合th属性(th:insert , th:replace , th:include)一起使用 。
-
th:insert 将代码块片段整个插入到使用了th:insert的HTML标签中
-
th:replace 将代码块片段整个替换到使用了th:replace的HTML标签中
-
th:include 将代码块片段包含的内容插入到使用了th:include的HTML标签中
*{...}选择变量表达式:是另一种类似{...}是在上下文的变量Map上求解。
- 两者获取对象里面属性的方式
- 两者进行混用的条件