SpringBoot入门系列(五)Thymeleaf的常用标签和用法

2020-06-19 00:00:00 变量 获取 表达式 页面 片段

前面介绍了Spring Boot 中的整合Thymeleaf 。今天我们主要来看看 Thymeleaf 的常用标签和用法!其他详细的内容,大家可以看看Thymeleaf官方使用手册 。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码 获取这个系列课程的完整源码。或者点此链接直接下载完整源码

 

一、基础语法

变量表达式 ${}

使用方法:直接使用th:xx = "${}" 获取对象属性 。例如:

<form id="userForm">    <input id="id" name="id" th:value="${user.id}"/>    <input id="username" name="username" th:value="${user.username}"/>    <input id="password" name="password" th:value="${user.password}"/></form>
<div th:text="hello"></div>
<div th:text="${user.username}"></div>

选择变量表达式 *{}

使用方法:首先通过th:object 获取对象,然后使用th:xx = "*{}"获取对象属性。

这种简写风格极为清爽,推荐大家在实际项目中使用。例如:

<form id="userForm" th:object="${user}">    <input id="id" name="id" th:value="*{id}"/>    <input id="username" name="username" th:value="*{username}"/>    <input id="password" name="password" th:value="*{password}"/></form>

URL表达式 @{}

使用方法:通过链接表达式@{}直接拿到应用路径,然后拼接静态资源路径。例如:

<script th:src="@{/webjars/jquery/jquery.js}"></script><link th:href="@{/webjars/bootstrap/css/bootstrap.css}" rel="stylesheet" type="text/css">

片段表达式 ~{}

片段表达式是Thymeleaf的特色之一,细粒度可以达到标签级别,这是JSP无法做到的。
片段表达式拥有三种语法:

  • ~{ viewName } 表示引入完整页面

  • ~{ viewName ::selector} 表示在指定页面寻找片段 其中selector可为片段名、jquery选择器等

  • ~{ ::selector} 表示在当前页寻找

使用方法:首先通过th:fragment定制片段 ,然后通过th:replace 填写片段路径和片段名。例如:

<!-- /views/common/head.html--><head th:fragment="static">        <script th:src="@{/webjars/jquery/3.3.1/jquery.js}"></script></head>
<!-- /views/your.html --><div th:replace="~{common/head::static}"></div>

在实际使用中,我们往往使用更简洁的表达,去掉表达式外壳直接填写片段名。例如:

<!-- your.html --><div th:replace="common/head::static"></div>

注意:使用替换路径th:replace 开头请勿添加斜杠,避免部署运行的时候出现路径报错。(因为默认拼接的路径为spring.thymeleaf.prefix = classpath:/templates/

消息表达式

即通常的国际化属性:#{msg} 用于获取国际化语言翻译值。例如:

<title th:text="#{user.title}"></title>

其它表达式

在基础语法中,默认支持字符串连接、数学运算、布尔逻辑和三目运算等。例如:

<input name="name" th:value="${'I am '+(user.name!=null?user.name:'NoBody')}"/>

 

二、迭代循环

想要遍历List集合很简单,配合th:each 即可快速完成迭代。例如遍历用户列表:

<div th:each="user:${userList}">    账号:<input th:value="${user.username}"/>    密码:<input th:value="${user.password}"/></div>

在集合的迭代过程还可以获取状态变量,只需在变量后面指定状态变量名即可,状态变量可用于获取集合的下标/序号、总数、是否为单数/偶数行、是否为个/后一个。例如:

<div th:each="user,stat:${userList}" th:class="${stat.even}?'even':'odd'">    下标:<input th:value="${stat.index}"/>    序号:<input th:value="${stat.count}"/>    账号:<input th:value="${user.username}"/>    密码:<input th:value="${user.password}"/></div>

如果缺省状态变量名,则迭代器会默认帮我们生成以变量名开头的状态变量 xxStat, 例如:

<div th:each="user:${userList}" th:class="${userStat.even}?'even':'odd'">    下标:<input th:value="${userStat.index}"/>    序号:<input th:value="${userStat.count}"/>    账号:<input th:value="${user.username}"/>    密码:<input th:value="${user.password}"/></div>

 

三、条件判断

条件判断通常用于动态页面的初始化,例如:

<div th:if="${userList}">    <div>的确存在..</div></div>

如果想取反则使用unless 例如:

<div th:unless="${userList}">    <div>不存在..</div></div>

 

四、日期格式化

使用默认的日期格式(toString方法) 并不是我们预期的格式:Mon Dec 03 23:16:50 CST 2018

<input type="text" th:value="${user.createTime}"/>

此时可以通过时间工具类#dates来对日期进行格式化:2018-12-03 23:16:50

<input type="text" th:value="${#dates.format(user.createTime,'yyyy-MM-dd HH:mm:ss')}"/>

 

五、内联写法

(1)为什么要使用内联写法?·答:因为 JS无法获取服务端返回的变量。


(2)如何使用内联表达式?答:标准格式为:[[${xx}]] ,可以读取服务端变量,也可以调用内置对象的方法。例如获取用户变量和应用路径:

 <script th:inline="javascript">        var user = [[${user}]];`        var APP_PATH = [[${#request.getContextPath()}]];        var LANG_COUNTRY = [[${#locale.getLanguage()+'_'+#locale.getCountry()}]];</script>


(3)标签引入的JS里面能使用内联表达式吗?答:不能!内联表达式仅在页面生效,因为Thymeleaf只负责解析一级视图,不能识别外部标签JS里面的表达式。

 


六、包含

我们在开发中常常都把页面共同的header和footer提取出来,弄成单独的页面,然后让该包含的页面包含进来,我们就拿footer举例,首先在【templates】下新建一个要背其他页面包含的footer页面【include】:

<html xmlns:th="http://www.thymeleaf.org"><footer th:fragment="footer1">    <p>All Rights Reserved</p></footer><footer th:fragment="footer2(start,now)">    <p th:text="|${start} - ${now} All Rights Reserved|"></p></footer></html>

 

然后直接在我们的hello.html页面中分别引用上面页面定义好的两个foot:

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>    <title>Thymeleaf快速入门-Hello Thymeleaf</title></head><body><div th:include="include::footer1"></div><div th:replace="include::footer2(2015,2018)"></div></body></html>

 

刷新页面,可以看到效果:



以上,就把如何创建运行Spring Boot项目简单的介绍完了,关于更多Thymeleaf的页面标签及用法还有form页面提交,页面交互等功能,这里就不一一细说了,大家可以下载我的完整的示例代码学习。 后面会深入介绍Spring Boot的各个功能和用法。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。



推荐阅读:


  • 【实战】如何使用apache ab性能工具进行压力测试

  • SpringBoot入门系列(四)整合Thymeleaf模板引擎

  • SpringBoot入门系列(三)SpringBoot资源文件属性配置

  • SpringBoot入门系列(二)Controller介绍及如何返回json数

  • SpringBoot入门系列(一)如何快速创建SpringBoot项

  • Nginx总结(五)如何配置Nginx和Tomcat实现反向代理

  • Nginx总结(四)基于域名的虚拟主机配置

  • Nginx总结(一)如何安装Nginx【详细教程】



相关文章