1. 概述
在本教程中,我們將探討Thymeleaf 中可用的不同類型的條件語句。
對於 Thymeleaf 的快速介紹,請參閲這篇文章。
2. Maven 依賴
讓我們從以下 Maven 依賴項開始,這些依賴項是使用 Thymeleaf 與 Spring 結合所需的:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>我們應該使用與其它 Spring 版本匹配的 thymeleaf-springX 庫,其中 X 代表 Spring 版本。請注意,Spring 5 通過 thymeleaf 從 3.0.8.RELEASE 版本開始得到支持。
所需依賴的最新版本可以在 這裏 找到。
3. Thymeleaf 條件判斷
我們必須區分允許根據條件在 HTML 元素內渲染文本,以及控制 HTML 元素自身實例化的條件判斷。
讓我們定義我們將在本文中使用的 Teacher 模型類:
public class Teacher implements Serializable {
private String gender;
private boolean isActive;
private List<String> courses = new ArrayList<>();
private String additionalSkills;3.1. Elvis 運算符
Elvis 運算符 ?: 允許我們在 HTML 元素內根據變量的當前狀態渲染文本。
我們可以使用默認表達式來在變量為 null 時提供默認文本:
<td th:text="${teacher.additionalSkills} ?: 'UNKNOWN'" />我們希望在 teacher.additionalSkills 變量已定義時顯示其內容,如果未定義則顯示文本 "UNKNOWN"。
還可以根據布爾表達式顯示任意文本:
<td th:text="${teacher.active} ? 'ACTIVE' : 'RETIRED'" />我們可以查詢簡單的布爾變量,就像在之前的示例中一樣,但字符串比較和範圍檢查也是可行的。
以下比較運算符及其文本表示形式得到支持:,,,,== (eq) 和 .
3.2. 如果 – 除非
th:if 和 th:unless 屬性允許我們根據提供的條件來渲染 HTML 元素:
<td>
<span th:if="${teacher.gender == 'F'}">Female</span>
<span th:unless="${teacher.gender == 'F'}">Male</span>
</td>如果 teacher.gender 變量的值等於 F,則渲染具有值為 Female 的 span 元素。否則,渲染具有 Male 值的元素。
這種設置與大多數編程語言中存在的 if-else 子句類似。
3.3. Switch – Case
如果表達式有超過兩個可能的返回值,可以使用 <em th:switch> 和 <em th:case> 屬性來對 HTML 元素進行條件渲染:
<td th:switch="${#lists.size(teacher.courses)}">
<span th:case="'0'">NO COURSES YET!</span>
<span th:case="'1'" th:text="${teacher.courses[0]}"></span>
<div th:case="*">
<div th:each="course:${teacher.courses}" th:text="${course}"/>
</div>
</td>
根據課程列表的大小,我們顯示默認文本、單個課程或所有可用的課程。我們使用星號(*) 作為默認選項。
4. 結論
在本文中,我們研究了不同類型的 Thymeleaf 條件語句,並提供了一些簡化的示例,展示了各種選項。