spring boot2.0一看就會的超詳細快速入門(六)-整合Thymeleaf模板引擎
1.理解Thymeleaf
1.1 Thymeleaf是一個適用於Web和獨立環境的伺服器端java模板引擎,能夠處理HTML、XML、JavaScript、CSS甚至純檔案,常見類似的工具有JSP、Freemarker等
1.2 Thymeleaf遵循的是一個自然模板的概念,主要目標是提供一種優雅且高度可維護的模板建立方式。將其邏輯注入模板檔案中,不會影響模板被用作設計原型,改善了設計與開發人員溝通成本,即原型即頁面。
1.3 語法優雅易懂:OGNL、SpringEL
1.4 遵循Web標準,支援HTML5
2.Thymeleaf標準語法
2.1 如何識別標準語法:
常用:<span th:text="...">
HTML5自定義屬性標準方式: <span data-th-text="...">
注意:使用Thymeleaf模板需要在HTML檔案中引入Thymeleaf名稱空間,如下圖:
控制器端程式碼如下:
頁面顯示效果:
2.2 標準語法:
2.2.1 標準表示式
變量表達式:
語法:${...}
示例:<h2 th:text="${msg}"></h2>
訊息表示式(文字外部化、國際化或i18n):
語法: #{...}
示例:<h2 th:text="#{msg}"></h2>
選擇表示式:
語法:*{...}
<div th:object="${user}">
....
<h2 th:text="*{name}"></h2> 作用相當於user.name
...
</div>
與變量表達式區別:它們是在當前選擇的物件而不是整個上下文變數對映上執行。優點:提高執行效率
連結表示式:
語法:@{...}
連結表示式主要作用於連結
連結表示式可以是相對的,在這種情況下,應用程式上下文將不會作為URL的字首:
<a th:href="@{../goldCup/..}">...</a>
也可以是伺服器相對(沒有應用上下文字首)
<a th:href="@{`/goldCup/..}">...</a>
和協議相對:
<a th:href="@{//code.jquery.com/jquery-1.11.3.min.js}">...</a>
絕對:
<a th:href="@{http://www.baidu.com}">...</a>
分段表示式:
語法:th:insert或th:replace
如下圖,在header.html中寫完可重用程式碼,其它html頁面通過insert、replace呼叫:
執行test.html如下:
字面量表達式:
文字
<p>顯示文字:<span th:text="'單引號引起來的文字'"></span></p>
效果演示如下:
數字:
<p>顯示文字:<span th:text="1+2"></span></p>
數字表達式可用於各種加減乘除算術運算
布林:
<div th:if="${user.isEnable()}==false">...
<div th:if="${user.name}==null">...
其它:
算術運算、比較和等價、條件
說明:無操作:用下劃線表示:_
<span th:text="${user.name}?_">如果user.name不存在則無操作,保留這一段文字</span>
如圖所示:
2.2.2 設定屬性值
設定任意屬性值th:attr
<input type="text" name="username" th:attr="value=#{username}"/>
設定值到指定屬性:
<form action="text.html" th:action="@{/demo}">...
固定值布林屬性
<input type="checkbox" name="option1" checked/>
<input type="checkbox" name="active" th:checked="${user.active}"/>
2.2.3 迭代器
基本迭代:th:each
<li th:each="user":${userJsons}" th:text="${user.name}">這裡是遍歷的使用者名稱稱</li>
狀態變數:跟蹤迭代器的狀態
index(索引從0開始)、count(計數從1開始),size(迭代器的總數)、current(當前迭代的變數)、even/odd(奇偶)、first、last
2.2.4 條件語句
th:if、th:unless
switch:
示例:
<div th:switch="${user.role}">
<p th:case="'admin'">管理員</p>
<p th:case="#{roles.manager}">經理角色</a>
<p th:case="*">不用想了,是其它角色</p>
</div>
2.2.5 模板佈局
定義和引用片段
th:fragment="common"...
不使用th:fragment
使用id識別示例如下:
2.2.6 屬性優先順序
具體可參照:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#attribute-precedence
2.2.7 註釋
標準HTML/XML註釋:<!-- 註釋內容-->
註釋塊:<!--/*-->...<!--*/-->
原型註釋塊:
<!--/*/.../*/-->
2.2.8 內聯
內聯表示式:
[[...]]或[()]分別對應於th:text和th:utext(不會進行轉義)
示例:
禁用內聯:
有時需要禁用這種機制,如某些特定條件下想要輸出[[...]]或[(...)]文字內容
<p th:inline="none">陣列內容為:[[1,2,3,4],[6,7]]</p>
2.2.9 基本物件
#ctx:上下文物件,是org.thymeleaf.context.IContext或org.thymeleaf.context.IWebContext實現
#locale:直接訪問與java.util.Locale關聯的當前請求
request/session等屬性:
param:用於檢測請求引數
session:用於檢測會話引數
application:用於檢索application/servlet屬性
Web上下文物件:
#request:直接訪問與當前請求關聯的javax.servlet.http.HttpServletRequest物件
#session:直接訪問與當前請求關聯的javax.servlet.http.HttpSession物件
#servletContext:直接訪問與當前請求關聯的javax.servlet.ServletContext物件
2.2.10 工具物件
3.Thymeleaf與Springboot整合:
在專案POM.XML檔案中新增依賴包管理:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
操作結果如圖所示: