SpringBoot第十篇:thymeleaf詳解


作者:追夢1819
原文:https://www.cnblogs.com/yanfei1819/p/10931435.html
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

引言

  SpringBoot 對 Web 的支持,官方推薦的是模板引擎 thymelaf。本章中,作者原意是直接講解 SpringBoot 與 Thymelaf 的集成。但是在示例完成時,發現集成並不難。核心關注點應該是 Thymelaf 模板引擎本身的用法。故本章將其單獨提出來講解。集成部分待下一章詳解。


簡介

  Thymeleaf 是一款用於渲染XML/XHTML/HTML5內容的模板引擎。類似JSP,Velocity,FreeMaker等,它也可以輕易的與Spring MVC等Web框架進行集成作為Web應用的模板引擎。與其它模板引擎相比,Thymeleaf最大的特點是能夠直接在瀏覽器中打開並正確顯示模板頁面,而不需要啟動整個Web應用。在開發團隊中實現更強大的協調作用。


功能特性

  • 原型即頁面;

  • 國際化支持;

  • 開箱即用;

  • 與 Spring 完美集成。


標准表達式語法

1、 ${...} 變量表達式,Variable Expressions

變量表達式可使用 thymleaf 的內置對象和內置方法。例如:

<p>Today is: <span th:text="${today}">13 february 2011</span>.</p>

2、@{...} 鏈接表達式,Link URL Expressions

用於靜態資源的引用,form表單的請求等鏈接。例如:

無參:@{/xxx}

有參:@{/xxx(k1=v1,k2=v2)} 對應url結構:xxx?k1=v1&k2=v2

引入本地資源:@{/項目本地的資源路徑}

引入外部資源:@{/webjars/資源在jar包中的路徑}

3、#{...} 消息表達式,Message Expressions

信息表達式通常用於國際化。

4、~{...} 代碼塊表達式,Fragment Expressions

  代碼表達式主要用來頁面布局的,支持兩種語法結構:

  • 推薦:~{templatename::fragmentname}
  • 支持:~{templatename::#id}

注意:

  1. templatename:模版名,Thymeleaf會根據模版名解析完整路徑:/resources/templates/templatename.html,要注意文件的路徑;
  2. fragmentname:片段名,Thymeleaf通過th:fragment聲明定義代碼塊,即:th:fragment="fragmentname"
  3. id:HTML的id選擇器,使用時要在前面加上#號,不支持class選擇器;
  4. 代碼塊表達式需要配合th屬性(th:insert,th:replace,th:include)一起使用:

   th:insert:將代碼塊片段整個插入到使用了th:insert的HTML標簽中;

   th:replace:將代碼塊片段整個替換使用了th:replace的HTML標簽中;

   th:include:將代碼塊片段包含的內容插入到使用了th:include的HTML標簽中。

5、*{...} 選擇(星號)變量表達式,Selection Variable Expressions

  選擇表達式很像變量表達式,不過它們用一個預先選擇的對象來代替上下文變量容器(map)來執行。

  變量表達式使用頻率最高,其功能也是非常的豐富。所以我們先從簡單的代碼塊表達式開始,然后是消息表達式,再是鏈接表達式,最后是變量表達式,隨帶介紹選擇變量表達式。


內置對象和方法

1、內置對象

  • ctx :上下文對象。
  • vars :上下文變量。
  • locale:上下文的語言環境。
  • request:(僅在web上下文)的 HttpServletRequest 對象。
  • response:(僅在web上下文)的 HttpServletResponse 對象。
  • session:(僅在web上下文)的 HttpSession 對象。
  • servletContext:(僅在web上下文)的 ServletContext 對象。

2、內置方法

  • strings:字符串格式化方法,常用的Java方法它都有。比如:equals,equalsIgnoreCase,length,trim,toUpperCase,toLowerCase,indexOf,substring,replace,startsWith,endsWith,contains,containsIgnoreCase等;

  • numbers:數值格式化方法,常用的方法有:formatDecimal等;

  • bools:布爾方法,常用的方法有:isTrue,isFalse等;

  • arrays:數組方法,常用的方法有:toArray,length,isEmpty,contains,containsAll等;

  • listssets:集合方法,常用的方法有:toList,size,isEmpty,contains,containsAll,sort等;

  • maps:對象方法,常用的方法有:size,isEmpty,containsKey,containsValue等;

  • dates:日期方法,常用的方法有:format,year,month,hour,createNow等。


表達式支持的語法

字面(Literals)

  • 文本文字(Text literals): 'one text', 'Another one!',…
  • 數字文本(Number literals): 0, 34, 3.0, 12.3,…
  • 布爾文本(Boolean literals):true, false
  • 空(Null literal):null
  • 文字標記(Literal tokens):one, sometext, main,…

文本操作(Text operations)

  • 字符串連接(String concatenation):+
  • 文本替換(Literal substitutions):|The name is ${name}|

算術運算(Arithmetic operations)

  • 二元運算符(Binary operators):+, -, *, /, %
  • 減號(單目運算符)Minus sign (unary operator):-

布爾操作(Boolean operations)

  • 二元運算符(Binary operators):and, or
  • 布爾否定(一元運算符)Boolean negation (unary operator):!, not

比較和等價(Comparisons and equality)

  • 比較(Comparators):>, <, >=, <= (gt, lt, ge, le)
  • 等值運算符(Equality operators):==, != (eq, ne)

條件運算符(Conditional operators)

  • If-then:(if) ? (then)
  • If-then-else:(if) ? (then) : (else)
  • Default: (value) ?:(defaultvalue)

常用 th 屬性

  html有的屬性,Thymeleaf基本都有,而常用的屬性大概有七八個。其中th屬性執行的優先級從1~8,數字越低優先級越高。

  • th:text :設置當前元素的文本內容,相同功能的還有th:utext,兩者的區別在於前者不會轉義html標簽,后者會。優先級不高:order=7;
  • th:value:設置當前元素的value值,類似修改指定屬性的還有th:srcth:href。優先級不高:order=6;
  • th:each:遍歷循環元素,和th:text或th:value一起使用。注意該屬性修飾的標簽位置,詳細往后看。優先級很高:order=2;
  • th:if:條件判斷,類似的還有th:unlessth:switchth:case。優先級較高:order=3;
  • th:insert:代碼塊引入,類似的還有th:replaceth:include,三者的區別較大,若使用不恰當會破壞html結構,常用於公共代碼塊提取的場景。優先級最高:order=1;
  • th:fragment:定義代碼塊,方便被th:insert引用。優先級最低:order=8;
  • th:object:聲明變量,一般和*{}一起配合使用,達到偷懶的效果。優先級一般:order=4;
  • th:attr:修改任意屬性,實際開發中用的較少,因為有豐富的其他th屬性幫忙,類似的還有th:attrappend,th:attrprepend。優先級一般:order=5

總結

  總體來說,thymelaf 的使用還是很簡單的。

  這篇文章參照了 thymelaf 官方文檔 ,所列舉的都為常用的一些用法或者語法。當然,如果讀者的英文閱讀能力不錯,推薦將 官方文檔 通讀一遍,細枝末節之處將更加清晰。另一方面,如果讀者的基礎比較強,作者建議去閱讀 thymelaf 的源碼。模板引擎,其實大體的原理都接近。此處篇幅所限,不做深入講解。

  后續如果有時間,作者將跟大家一起學習、分享源碼系列。
  源碼:我的GitHub

參考

   thymelaf 官方文檔


![](https://img2018.cnblogs.com/blog/1183871/201905/1183871-20190527163006503-1962736544.png)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM