1. 程式人生 > >spring boot2.0一看就會的超詳細快速入門(六)-整合Thymeleaf模板引擎

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>

操作結果如圖所示: