模板引擎三 Thymeleaf

一、瞭解Thymeleaf

Thymeleaf是面向Web和獨立環境的現代服務器端Java模板引擎,能夠處理HTML,XML,JavaScript,CSS甚至純文本。
Springboot體系內推薦使用Thymeleaf作爲前端頁面模板,並且Springboot2.0中默認使用Thymeleaf3.0,性能提升幅度很大。
可用於靜態、動態頁面。
各種引擎的語法都可以在Thymeleaf中使用,非常方便,同時也很混亂,很龐大。
Thymeleaf提供Spring標準方言和一個與SpringMVC完美集成的可選模塊,可以快速的實現表單綁定、屬性編輯器、國際化等功能。
官方文檔:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#introducing-thymeleaf

二、Thymeleaf在springboot中的快速入門

1、添加依賴
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
2、properties配置不開啓Thymeleaf緩存
    spring.thymeleaf.cache=false
3、HTML文件引入對Thymeleaf的支持
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    Thymeleaf文件默認後綴爲.html,默認存放路徑爲:classpath:/templates/

    
4、去掉html頁面錯誤驗證波浪線警告

5、編寫Controller

6、效果展示

三、Thymeleaf基本語法

1、Thymeleaf的th屬性

文本屬性:
    文本拼接:||
    文本信息:th:text,th:id,th:value...
    文本信息:th:utext 可解析HTML
條件屬性:
    if判斷:th:if
    unless判斷:th:unless
    switch判斷:th:switch...th:case
循環屬性-th:each:
    th:each迭代list
    th:each迭代map
    th:each的內置屬性

2、標準表達式語法

${...}變量表達式:也叫OGNL表達式,或Spring EL表達式,用於調用各種屬性和方法
    a.可以獲取對象的屬性和方法
    b.可以使用ctx、vars、locale、request、response、session、servletContext內置對象
    c.可用使用dates、numbers、strings、objects、arrays、lists、sets、maps等內置方法
@{...}鏈接表達式:不管是靜態資源的引用,form表單的請求,凡是鏈接都可以用@{...}
    a.無參:@{/xxx}
    b.有參:@{/xxx(k1=v1,k2=v2)},對應的url結構:xxx?k1=v1&k2=v2
    c.引入本地資源:@{/項目本地的資源路徑}
    d.引入外部資源:@{/webjars/資源在jar包中的路徑}
#{...}消息表達式:用於從消息源中提取消息內容實現國際化
    a.語法和變量表達式相比多了個獲取參數的方式
    b.消息源主要是properties文件
~{...}代碼塊表達式:把某一段定義好的代碼插入到另一個頁面中,一般用於定義出一套通用的header或者是footer
*{...}選擇變量表達式:是另一種類似${...},某些時候是等價的,*{...}是在執行時是在選擇的對象上求解(使用th:object選擇對象),而${...}是在上下文的變量Map上求解

3、Thymeleaf中表達式支持的語法

字面、文字操作、算術運算、布爾運算、比較運算、條件運算符

4、Thymeleaf中的內置對象

#ctx:上下文對象
#vars:上下文對象
#locale:區域對象
#request:HttpServletRequest對象(僅web環境可用)
#response:HttpServletResponse對象(僅web環境可用)
#session:HttpSession對象(僅web環境可用)
#servletContext:ServletContext(僅web環境可用)
param:獲取請求的參數
session:訪問session屬性
application:獲取應用程序/servlet上下文屬性
以上三個不帶#的內置對象,都擁有以下方法:size()、isEmpty()、containsKey()、.key

5、Thymeleaf中的內聯標籤-body內的內聯

[[...]]等價於th:text(結果將被HTML轉義)
[(...)]等價於th:utext(結果不會被HTML轉義)

對比寫法:
[[${name}]]
th:text="${name}"

body默認開啓內聯標籤的使用,可設置關閉不使用內聯標籤:
    <body th:inline="none">

6、Thymeleaf中的內聯標籤-js裏的內聯

在JavaScript中使用內聯標籤,默認不開啓支持。
在script標籤引入對內聯的支持:<script th:inline="javascript">
在script標籤中同樣使用[[]]、[()]來獲取後端數據
使用js註釋實現前後端分離:var msg = /*[[${name}]]*/'666666'; 這樣服務器打開頁面時展示${name}值,靜態打開時展示666666
JavaScript中內聯的特性:內聯表達式的計算結果不限於字符串,能夠自動將後臺的數據序列化爲javascript對象。即後臺寫入的是什麼類型的數據,在JavaScript中會序列化爲對應類型的javascript對象數據。寫入List對象,取出也是JavaScript的list對象

注意:js中開啓內聯標籤模式只能在html文件內部的JavaScript代碼,不能在引入的外部JavaScript文件中進行操作

7、Thymeleaf中的內聯標籤-css裏的內聯

在CSS中使用內聯標籤,默認不開啓支持
在style標籤上引入對內聯的支持:<style th:inline="css">
在style標籤中同樣使用[[]]、[()]來獲取後端數據
也可通過註釋實現前後端分離,但Thymeleaf會自動忽略掉css註釋之後和分號之前的代碼。/*[[${color}]]*/red 動態顯示${color}顏色,靜態顯示紅色

注意:css中開啓內聯標籤模式只能在html文件內嵌的<style>標籤中使用,不能在外部關聯的CSS文件中進行使用

四、Thymeleaf在springboot中的應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章