1. 概述
Thymeleaf 是一款 多功能的 Java 模板引擎,用於處理 XML、XHTML 和 HTML5 文檔
在本快速教程中,我們將學習如何使用 Thymeleaf 進行迭代,以及該庫提供的其他功能。
有關 Thymeleaf 的更多信息,請參閲我們的入門文章。
2. Maven 依賴
為了創建此示例,我們將使用 Spring Framework 庫和 Thymeleaf 庫。
這裏我們可以看到我們的依賴項(thymeleaf 和 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>3. 示例設置
在深入視圖層之前,讓我們為我們的示例創建一個 MVC 結構。
從模型層的代碼片段開始:
public class Student implements Serializable {
private Integer id;
private String name;
// standard contructors, getters, and setters
}讓我們也提供負責加載模型並將其返回到視圖層的控制器方法:
@GetMapping("/listStudents")
public String listStudent(Model model) {
model.addAttribute("students", StudentUtils.buildStudents());
return "listStudents.html";
}在上述示例中,buildStudents()方法返回一個Student對象列表,然後我們將該列表添加到model中。
4. th:each 屬性
在 Thymeleaf 中,迭代是通過使用 th:each 屬性 實現的。
這個屬性的一個有趣之處在於,它可以接受和迭代多種數據類型,例如:
- 實現 接口的 Object
- 實現 接口的 Object
- 數組
- 任何其他 Object 都被視為包含一個元素的單值列表
現在,讓我們使用我們在上面的示例中設置的數據來調用 :
<tr th:each="student: ${students}">
<td th:text="${student.id}" />
<td th:text="${student.name}" />
</tr>代碼片段展示了對我們的 Students 列表進行 th:each 迭代。模型屬性使用 ${} 語法訪問,並且列表中的每個元素都通過 student 變量傳遞到循環的主體。
5. 狀態變量
Thymeleaf 還 提供了一個有用的機制,通過狀態變量來跟蹤迭代過程.
狀態變量提供以下屬性:
- index: 當前迭代索引,從 0 (零) 開始
- count: 已經處理的元素的數量
- size: 列表中元素的總數
- even/odd: 檢查當前迭代索引是否為偶數或奇數
- first: 檢查當前迭代是否為第一個
- last: 檢查當前迭代是否為最後一個
讓我們看看狀態變量在我們的示例中是如何工作的:
<tr
th:each="student, iStat : ${students}"
th:style="${iStat.odd}? 'font-weight: bold;'"
th:alt-title="${iStat.even}? 'even' : 'odd'">
<td th:text="${student.id}" />
<td th:text="${student.name}" />
</tr>在此,我們包含了 iStat.odd 屬性來評估條件併為當前行設置粗體樣式。同樣的操作在下一次評估中也執行,但這一次我們使用 iStat.even 通過 alt/title HTML 屬性打印值。
如果省略顯式創建狀態變量(如示例中的 iStat),我們可以通過簡單地使用 studentStat,來調用我們的狀態變量,該變量是 student 變量與後綴 Stat 的聚合。
6. 結論
在本文中,我們探討了 Thymeleaf 庫提供的眾多功能之一。
我們介紹了 Thymeleaf 中使用 th:each 屬性進行迭代,以及其內置屬性。