標準表示式語法
- ${...}:變數表示式
- *{...}:選擇表示式
- \#{...}:訊息(i18n)表示式
- @{...}:URL表示式
- ~{...}:片段表示式
變數表示式
將Thymeleaf與Spring整合-在上下文變數(在Spring行話中也稱為 Spring jargon)上執行
OGNL表示式長這樣 :
${session.user.name}
他們可以作為屬性的值,像這樣:
<span th:text="${book.author.name}">
以上程式碼和這樣是相等的(OGNL和SpEL語言)
((Book)context.getVariable("book")).getAuthor().getName()
我們可以使用迭代訪問變數
<li th:each="book : ${books}">
$ {books}從上下文中選擇稱為books的變數,並將其評估為可迭代的變數,以在th:each迴圈中使用
選擇表示式
選擇表示式和變數表示式類似,而選擇表示式只能在先前選擇的物件上執行,不能全域性執行
選擇表示式長這樣:
*{customer.name}
它們作用的物件由th:object屬性指定
<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());
}
訊息表示式
經常稱為text externalization, internationalization或者 i18n
訊息表示式允許我們從.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})}
連結表示式
連結表示式用於構建URL並向其新增有用的上下文和會話資訊(此過程通常稱為URL重寫)
一個網頁應用部署在你的web伺服器的myapp上下文,表示式長這樣:
<a th:href="@{/order/list}">...</a>
他會被轉換為:
<a href="/myapp/order/list">...</a>
如果我們需要保留會話且未啟用Cookie(或伺服器尚不知道),請執行以下操作
<a href="/myapp/order/list;jsessionid=23fa31abd41ea093">...</a>
URL還可以加入變數
<a th:href="@{/order/details(id=${orderId},type=${orderType})}">...</a>
他實際是會被轉換為這樣的:
<!-- Note ampersands (&) should be HTML-escaped in tag attributes... -->
<a href="/myapp/order/details?id=23&type=online">...</a>
URL表示式可以是相對的,在這種情況下,沒有應用程式上下文將作為URL的字首:
<a th:href="@{../documents/report}">...</a>
也可以是伺服器的相對(同樣也沒有URL字首)
<a th:href="@{~/contents/main}">...</a>
相對協議(與絕對URL相同,但瀏覽器將使用與所顯示頁面相同的HTTP或HTTPS協議):
<a th:href="@{//static.mycompany.com/res/initial}">...</a>
url表示式也當然可以是絕對的
<a th:href="@{http://www.mycompany.com/main}">...</a>
片段表示式
片段表示式是表示標記片段並在模板中使用它們的簡單方法。
最常見的用途是使用th:insert或th:replace插入片段:
<div th:insert="~{commons :: main}">...</div>
可以在任何地方使用,像變數一樣
<div th:with="frag=~{footer :: #main/text()}">
<p th:insert="${frag}">
</div>
字面量和方法
字面量:
* 文字字面量:'one text', 'Another one!' * 數字字面量:0, 34, 3.0, 12.3, * 布林字面量:true,false * 空關字面量:null
文字操作:
* String concatenation: + * Literal substitutions: |The name is ${name}|
數學操作:
* Binary operators: +, -, *, /, % * Minus sign (unary operator): -
布林運算子:
* Binary operators: and, or * Boolean negation (unary operator): !, not
比較和相等:
* Comparators: >, <, >=, <= (gt, lt, ge, le) * Equality operators: ==, != (eq, ne)
條件操作:
* If-then: (if) ? (then) * If-then-else: (if) ? (then) : (else) * Default: (value) ?: (defaultvalue)
表示式預處理
預處理看起來像這樣
#{selection.__${sel.code}__}
我們看到的是一個表示式${sel.code},他將被預先執行,然後將其結果(假如是ALL)selection.ALL返回
一些基本屬性
th:text替換標籤的文字
<p th:text="#{msg.welcome}">Welcome everyone!</p>
th:each和Java的forEach相同
<li th:each="book : ${books}" th:text="${book.title}">En las Orillas del Sar</li>
Thymeleaf模仿的特定的XHTML和HTML5屬性th:action, th:value, th:href
<form th:action="@{/createOrder}">
<input type="button" th:value="#{form.submit}" />
<a th:href="@{/admin/users}">