Thymeleaf

pardon110發表於2020-05-29

spring整合了Thymeleaf模板引擎,本文對此作些許介紹

方言

Thymeleaf提供了靈活介面,允許使用方定製自己的方言。因此在自定義方言之前,有必要先了解標準方言。

標準表示式

${...} : 變數表示式.
*{...} : 區域選擇表示式.
#{...} : 訊息國際化表示式.
@{...} : 連結表示式.
~{...} : 程式碼段表示式.

Variable

變數表示式通常是OGNL

${session.user.name}

Thymeleaf

<span th:text="${book.author.name}">

等價SpringEL 或 OGNL

((Book)context.getVariable("book")).getAuthor().getName()

從上下文讀取迭代

<li th:each="book : ${books}">

選擇表示式

類似下面這樣,通常是在子區域內選擇當前上下文,類似go模板中的.

*{customer.name}

完整示例

<div th:object="${book}">
  ...
  <span th:text="*{title}">...</span>
  ...
</div>

等價於

{
  // th:object="${book}"
  final Book selection = (Book) context.getVariable("book");
  // th:text="*{title}"
  output(selection.getTitle());
}

國際化

通常會依賴鍵定位讀取本地.properties 檔案中對應語言的訊息

#{main.title}
#{message.entrycreated(${entryId})}

在模板中是這樣

<table>
  ...
  <th th:text="#{header.address.city}">...</th>
  <th th:text="#{header.address.country}">...</th>
  ...
</table>

當然鍵亦可使用變數

#{${config.adminWelcomeKey}(${session.user.name})}

連結表示式

基於webserver上下文為根路徑生成,假定根路徑/myapp

<a th:href="@{/order/list}">...</a>

對應

<a href="/myapp/order/list">...</a>

保持會話

<a href="/myapp/order/list;jsessionid=23fa31abd41ea093">...</a>

帶參url

<a th:href="@{/order/details(id=${orderId},type=${orderType})}">...</a>

結果可能是這樣

<a href="/myapp/order/details?id=23&amp;type=online">...</a>

相對伺服器的連結,應用上下文字首不被新增

<a th:href="@{~/contents/main}">...</a>

基於協議的絕對路徑

<a th:href="@{//static.mycompany.com/res/initial}">...</a>

<a th:href="@{http://www.mycompany.com/main}">...</a>

片段表示式

有時部會新增或替換一段java程式碼 th:insertth:replace

<div th:insert="~{commons :: main}">...</div>

<div th:with="frag=~{footer :: #main/text()}">
  <p th:insert="${frag}">
</div>
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章