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