Thymeleaf 標準表達式語法
變量表達式${ }
在控制器中往頁面傳遞幾個變量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class IndexController {
public String index(HttpSession session, Model model){
User user = new User();
user.setName("KangKang");
user.setAge(25);
user.setHabbit(new String[]{"football","basketball","swim"}); |
在頁面中使用變量表達式${}
來獲取它們:
1 2 3 4 |
<p th:utext="${user.name}"></p>
<p th:utext="${session.user.getName()}"></p>
<p th:utext="${session.user.upcaseName()}"></p>
<p th:utext="${user.habbit[0]}"></p> |
可以看到變量表達式不但可以獲取變量的屬性值,甚至還可以訪問變量的方法(getName()和upcaseName())。session代表HttpSession對象。
選擇表達式*{ }
選擇表達式的使用方法如下所示:
1 2 3 4 5 |
<div th:object="${session.user}">
<p>name: <span th:text="*{name}"></span></p>
<p>age: <span th:text="*{age}"></span></p> |
*{}
代指th:object
所指定的對象,即${session.user}
。
URL鏈接表達式@{ }
URL鏈接表達式會給URL自動添加上下文的名字。比如:
1 | <a th:href="@{/main}">main</a> |
解析後的href值為http://localhost:8080/thymeleaf/main
。
當需要在URL中傳遞參數時,比如這樣http://localhost:8080/thymeleaf/main?name=KangKang
,可以如下操作:
1 | <a th:href="@{/main(name=${session.user.name})}">main</a> |
傳遞多個參數:
1 | <a th:href="@{/main(name=${session.user.name},age=${session.user.age})}">main</a> |
路徑變量的寫法:
1 | <a th:href="@{/main/{name}(name=${session.user.name})}">main</a> |
後端接受路徑變量:
1 2 3 4 5 | public String main(@PathVariable String name){ System.out.println("pathValue: "+name); return "main"; } |
字面量
文本常量
文本常量指的是單引號之間的字符串,比如:
1 | <p th:text="‘Welcome KangKang‘"></p> |
數字常量
1 2 | <p>The year is <span th:text="2017">1492</span>.</p> <p>In two years, it will be <span th:text="2017 + 2">1494</span>.</p> |
Boolean類型的常量
Boolean類型的常量就是true和false。例如:
1 | <div th:if="${user.isAdmin()} == false"> ... |
Null常量
1 | <div th:if="${variable.something} == null"> ... |
字面量替換
除了使用‘...‘ + ${}
來連接字面量和變量外,還可以使用|...|
來代替,比如:
1 | <p th:utext="|hello,${session.user.name},your age is ${session.user.age}|"></p> |
等價於:
1 | <p th:utext="‘hello,‘+${session.user.name}+‘,your age is ‘+${session.user.age}"></p> |
在| ... |
字面替換中只允許有變量表達式${...}
條件表達式
條件表達式實際上就是三目運算符。比如:
1 2 3 | <tr th:class="${row.even}? ‘even‘ : ‘odd‘"> ... </tr> |
條件表達式也可以使用括號嵌套:
1 2 3 | <tr th:class="${row.even}? (${row.first}? ‘first‘ : ‘even‘) : ‘odd‘"> ... </tr> |
else表達式也可以省略,在這種情況下,如果條件為false,則返回空值:
1 2 3 | <tr th:class="${row.even}? ‘even‘"> ... </tr> |
默認表達式
默認表達式是一種特殊類型的條件值,不帶then部分。比如:
1 | <p th:utext="${session.user.sex} ?: ‘sex is unknown‘"></p> |
表示,當${session.user.sex}
為null
時,值為sex is unknown,否則為表達式的值。這就好像為表達式指定了一個默認值一樣。其等價於:
1 | <p th:utext="${session.user.sex != null} ? ${session.user.sex}: ‘sex is unknown‘"></p> |
更詳細的內容可參考官方文檔:http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#standard-expression-syntax
Thymeleaf 標準表達式語法