Thymeleaf
概述:Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP
Thymeleaf的使用可以查看网站:****[https://fanlychie.github.io/post/thymeleaf.html]**
特点:
1、动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行
它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果,这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式,浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
2、开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
3、多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
4、与springBoot完美整合:
与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,
并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。
Thymeleaf常用命名空间:
xmlns:th=http://www.thymeleaf.org
xmlns:sec=http://www.thymeleaf.org/extras/spring-security
xmlns:shiro=http://www.pollix.at/thymeleaf/shiro
Thymeleaf使用:
添加thymeleaf启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
添加该启动器后,SpringBoot会自动为Thymeleaf注册一个视图解析器ThymeleafViewResolver,还配置了模板文件(html)的位置,与jsp类似的前缀+ 视图名 + 后缀风格,前缀为/templates/ 后缀为.html
与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板文件的位置:
在application.yaml配置文件中 配置thymeleaf缓存,编码
spring:
thymeleaf:
cache: false
mode: HTML5
encoding: UTF-8
messages: #国际化基础名
basename: i18n.login
在html页面导入thymeleaf的命名空间:xmlns:th=http://www.thymeleaf.org
<html lang="en" xmlns:th="http://www.thymeleaf.org">
所有的html属性,thymeleaf都支持,如:th:href th:src等
基本使用:
表达式
${}:变量表达式
*{} :选择变量表达式
#{…} : Message 表达式
URL
绝对网址:绝对URL用于创建到其他服务器的链接,它们需要指定一个协议名称(http://或https://)开头
上下文相关URL:与Web应用程序根相关联URL跳转
与服务器相关URL:服务器相关的URL与上下文相关的URL非常相似
跳转
携带参数:aa
链接url都使用@{},如:
国际化:使用#{}输出国际化消息
提取公共页面:~{}
A、将页面公共页面提取出来,定义fragment th:fragment=”sideBar”
B、在页面使用th:insert或th:replace 插入 <th:replace=”~{common/commons::sideBar}”该片段的页面
th:insert 将公共的标签及内容插入到指定标签当中
th:replace 将公共的标签替换指定的标签
th:include 将公共标签的内容包含到指定标签当中
引用公共模块还可以进行传值:
普通字符串与表达式拼接:
字符串直接字面值拼接表达式:
比较运算 :> gt < lt >= ge <= le
三元运算:conditon ? then : else
内联写法:使用两个[],直接在标签中引用变量:
[[${hero.username}]]
局部变量:
<div th:with="a=${heroList[0]}">
<p>
<span th:test="${a.username}">
</p>
</div>
判断:th:if = “${}” 为true时才显示该标签
th:unless= 不为true时才显示该标签
th:switch:只显示其中一个满足条件的标签,都不满足,显示默认值
<div th:switch="${hero.username}">
<p thcase="'高山'">高山</p>
<p th:case="'李刚'">李刚</p>
<p th:case="*">都不是</p>
</div>
迭代:
普通迭代
<tr th:each="item : ${List} ">
<td th:text="${item.username}"></td>
</tr>
迭代传入默认对象stat
<tr th:each="item,stat : ${List} ">
<td th:text="${stat.index}"></td>
<td th:text="${item.username}"></td>
</tr>
stat对象包含以下属性:
index,从0开始的角标
count,元素的个数,从1开始
size,总元素个数
current,当前遍历到的元素
even/odd,返回是否为奇偶,boolean值
first/last,返回是否为第一或最后,boolean值
thymeleaf的内置对象:
${#ctx} 上下文对象,可用于获取其它内置对象。
${#vars}: 上下文变量。
${#locale}:上下文区域设置。
${#request}: HttpServletRequest对象。
${#response}: HttpServletResponse对象。
${#session}: HttpSession对象。
${#servletContext}: ServletContext对象。
全局对象功能:
全局对象功能
#strings:字符串工具类
#lists:List 工具类
#arrays:数组工具类
#sets:Set 工具类
#maps:常用Map方法。
#objects:一般对象类,通常用来判断非空
#bools:常用的布尔方法。
#execInfo:获取页面模板的处理信息。
#messages:在变量表达式中获取外部消息的方法,与使用#{…}语法获取的方法相同。
#uris:转义部分URL / URI的方法。
#conversions:用于执行已配置的转换服务的方法。
#dates:时间操作和时间格式化等。
#calendars:用于更复杂时间的格式化。
#numbers:格式化数字对象的方法。
#aggregates:在数组或集合上创建聚合的方法。
#ids:处理可能重复的id属性的方法。
${#strings.abbreviate(str,10)} str截取0-10位,后面的全部用…这个点代替,注意,最小是3位
${#strings.toUpperCase(name)}