Thymeleaf each是Thymeleaf模板中強大的迭代器,可以在模板中對集合數據進行循環,以便方便地渲染列表或表格等等。在本文中,我們將從多個角度來探究Thymeleaf each的用法和更多細節。
一、基礎用法
在Thymeleaf中,使用th:each屬性可以對集合進行迭代。
<ul>
<li th:each="item : ${items}">
<span th:text="${item}">Item name</span>
</li>
</ul>
在上面的代碼中,我們使用了th:each屬性迭代了一個集合,其中變數item表示集合中的每一個元素。在循環體內,我們使用th:text屬性展示了每個元素的文本內容。
此外,Thymeleaf each還支持迭代時另外指定索引變數和循環狀態變數,如下所示:
<ul>
<li th:each="item,iterStat : ${items}">
<span th:text="${iterStat.index}">1</span>:<span th:text="${item}">Item name</span>
<br/>
</li>
</ul>
在上面的代碼中,我們使用th:each屬性同時指定了變數item和iterStat,其中iterStat是一個內置變數,表示當前的迭代狀態。我們可以使用iterStat訪問當前迭代的索引(iterStat.index)和是否是首(iterStat.first)或尾(iterStat.last)元素。
二、迭代器的嵌套
迭代器的嵌套是Thymeleaf each的常用技巧,可以用於渲染嵌套的列表或表格。例如,我們可以通過嵌套迭代器來渲染一個二維列表:
<table>
<tr th:each="row : ${matrix}">
<td th:each="cell : ${row}">
<span th:text="${cell}">Cell content</span>
</td>
</tr>
</table>
在上面的代碼中,我們首先使用外部迭代器row來循環遍歷二維列表的每一行,然後在行內使用內部迭代器cell來循環遍歷當下行的每一個單元格。使用這種方式可以輕鬆渲染出一個簡單的二維表格。
三、局部變數的應用
在Thymeleaf中,我們還可以使用局部變數來臨時存儲循環體內的某一元素,並在後續的操作中使用。
<ul>
<li th:each="item : ${items}">
<span th:text="${item}">Item name</span>
<span th:text="${#lists.last(items)?'':','}"></span> <!-- 如果不是最後一個元素,輸出逗號 -->
<span th:with="nextItem=${#lists.next(items, item)}" th:text="${nextItem != null ? nextItem : ''}"></span> <!-- 展示下一個元素 -->
</li>
</ul>
在上面的代碼中,我們使用Thymeleaf提供的#lists工具類來操作集合,通過lists.last判斷當前元素是否是最後一個元素,如果不是則輸出逗號。同時我們使用th:with創建了局部變數nextItem,通過#lists.next方法獲取當前元素之後的下一個元素,並且將其展示在模板中。
四、排序和過濾
在實際開發中,我們經常需要按照某種規則對集合元素進行排序或者過濾,Thymeleaf也提供了非常方便的處理方式。
<ul>
<li th:each="item : ${#lists.sort(items)}">
<span th:text="${item}">Item name</span>
</li>
</ul>
<ul>
<li th:each="item : ${#lists.filter(items, lambda(item): item != null)}">
<span th:text="${item}">Item name</span>
</li>
</ul>
在上面的代碼中,我們使用#lists工具類提供了兩種操作:#lists.sort用於對集合元素進行排序,而#lists.filter用於對集合元素進行過濾。注意到我們在#lists.filter中使用了一個lambda表達式來指定過濾規則,這樣可以非常方便地靈活地控制過濾規則。
五、小結
本文從基礎用法、迭代器的嵌套、局部變數、以及排序和過濾四個方面分別詳細介紹了Thymeleaf each的用法和技巧。通過對這些細節的掌握,我們可以更加高效地使用Thymeleaf each來渲染模板,提高應用的性能和靈活性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194080.html