初學Thymeleaf,筆記(防老年癡呆)

 

Thymeleaf官方學習地址:https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#what-is-thymeleaf

以下是個人筆記(只記錄了比較具有特色的方言):

Spring Boot提供了默認配置的模板引擎主要有以下幾種:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

 因項目需要使用SpringBoot框架,所以需瞭解幾種默認的模版引擎。

Thymeleaf標準表達式功能的快速瞭解:

  • 簡單表達:變量表達式: ${...}
  • 選擇變量表達式: *{...}
  • 消息表達式: #{...}
  • 鏈接網址表達式: @{...}
  • 字面文本文字:'one text','Another one!',...
  • 號碼文字:0,34,3.0,12.3,...
  • 布爾文字:true,false
  • 空文字: null
  • 文字標記:one,sometext,main,...
  • 文字操作:字符串連接: +
  • 字面替換: |The name is ${name}|
  • 算術運算:二元運算符:+,-,*,/,%
  • 減號(一元運算符): -
  • 布爾運算:二元運算符:and,or
  • 布爾否定(一元運算符): !,not
  • 比較和平等:比較:>,<,>=,<=(gt,lt,ge,le)
  • 平等運營商:==,!=(eq,ne)
  • 有條件的運營商:IF-THEN: (if) ? (then)
  • IF-THEN-ELSE: (if) ? (then) : (else)
  • 默認: (value) ?: (defaultvalue)
  • 所有這些功能都可以組合和嵌套使用:
  • 例子:'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown'))

${...}表達式實際上是在上下文中包含的變量映射上執行的OGNL(對象 - 圖形導航語言)表達式。

OGNL官方瞭解地址:http://commons.apache.org/proper/commons-ognl/

表達式基本對象,可用於表達式以獲得更高的靈活性,將以#符號開頭引用這些對象(按照OGNL標準):

  • #ctx:上下文對象。
  • #vars: 上下文變量。
  • #locale:上下文區域設置。
  • #httpServletRequest:(僅限Web Contexts)HttpServletRequest對象。
  • #httpSession:(僅限Web Contexts)HttpSession對象。

          基本對象詳情

除了這些基本對象,Thymeleaf還將爲我們提供一組實用程序對象,幫助我們在表達式中執行常見任務。

  • #datesjava.util.Date對象的實用方法:格式化,組件提取等。
  • #calendars:類似於#dates,但java.util.Calendar對象。
  • #numbers:用於格式化數字對象的實用方法。
  • #stringsString對象的實用方法:contains,startsWith,prepending / appending等。
  • #objects:一般的對象的實用方法。
  • #bools:布爾評估的實用方法。
  • #arrays:數組的實用方法。
  • #lists:列表的實用方法。
  • #sets:集合的實用方法。
  • #maps:地圖的實用方法。
  • #aggregates:用於在數組或集合上創建聚合的實用程序方法。
  • #messages:用於在變量表達式中獲取外部化消息的實用程序方法,與使用#{...}語法獲取它們的方式相同。
  • #ids:用於處理可能重複的id屬性的實用程序方法(例如,作爲迭代的結果)。

           瞭解Expression Utility對象詳情

 

變量表達式不僅可以用${...}表達式編寫,還可以用表達式編寫*{...}

官方示例:

<div th:object="${session.user}">
    <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
    <p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
    <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
  </div>

對比(完全等同於上例):

<div>
  <p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
  <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
  <p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
</div>

 

Thymeleaf標準方言具有特殊的語法,@語法:@{...}

有不同類型的網址:

  • 絕對的URL,比如 http://www.thymeleaf.org
  • 相對URL,可以是:
    • 頁面相對,像 user/login.html
    • 上下文相關,如/itemdetails?id=3(服務器中的上下文名稱將自動添加)
    • 與服務器相關,~/billing/processInvoice(允許在同一服務器中調用另一個上下文(=應用程序)中的URL)。
    • 協議相對URL,如 //code.jquery.com/jquery-2.0.3.min.js

Thymeleaf可以在任何情況下處理絕對URL,但對於相對URL,它將要求您使用實現該IWebContext接口的上下文對象,該接口包含來自HTTP請求的一些信息以及創建相對鏈接所需的信息。

官方示例:

<!-- Will produce 'http://localhost:8080/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" 
   th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>

<!-- Will produce '/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>

<!-- Will produce '/gtvg/order/3/details' (plus rewriting) -->
<a href="details.html" th:href="@{/order/{orderId}/details(orderId=${o.id})}">view</a>

有些事情需要注意:

  • th:href是屬性修飾符屬性:一旦處理,它將計算要使用的鏈接URL並將<a>標記的href屬性設置爲此URL。
  • 我們可以使用表達式來指定URL參數(如您所見orderId=${o.id})。還將自動執行所需的URL編碼操作。
  • 如果需要幾個參數,這些參數將用逗號分隔 @{/order/process(execId=${execId},execType='FAST')}
  • URL路徑中也允許使用變量模板,例如 @{/order/{orderId}/details(orderId=${orderId})}
  • /(like /order/details)開頭的相對URL 將自動以應用程序上下文名稱爲前綴。
  • 如果未啓用cookie或尚未知道cookie,則";jsessionid=..."可能會在相對URL中添加後綴,以便保留會話。這稱爲URL重寫,Thymeleaf允許您通過response.encodeURL(...)Servlet API爲每個URL 插入自己的重寫過濾器。
  • th:href標記允許我們(可選)有一個靜態的工作href在我們的模板屬性,所以,當爲原型的目的直接打開我們的模板鏈接仍然通航由瀏覽器。

 

文字替換允許輕鬆格式化包含變量值的字符串,而無需附加文字'...' + '...'。這些替換必須用豎線(|)包圍,如:

官方示例:

<span th:text="|Welcome to our application, ${user.name}!|">

 相當於:

<span th:text="'Welcome to our application, ' + ${user.name} + '!'">

注意${...}|...|文字替換中只允許使用變量表達式()。沒有其他文字('...'),布爾/數字標記,條件表達式等。

發佈了41 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章