在Thymeleaf中,循环语法主要依赖于th:each
属性。以下是一些关于Thymeleaf循环语法的详细解释:
1. 基本循环语法
<tr th:each="item : ${items}"> <td th:text="${item.id}"></td> <td th:text="${item.name}"></td> <td th:text="${item.price}"></td> </tr>
在这个例子中,th:each="item : ${items}"
表示对名为items
的集合进行迭代,每次迭代中,当前元素被赋值给变量item
。然后,你可以使用${item.property_name}
来访问当前元素的属性。
2. 状态变量
Thymeleaf的循环还提供了一个内置的状态变量,可以用来跟踪当前迭代的状态:
${itemStat.index}
:当前项目的索引(从0开始)。${itemStat.count}
:当前项目的索引(从1开始)。${itemStat.size}
:项目集的总大小。${itemStat.first}
:布尔值,如果当前项目是第一个项目则为true。${itemStat.last}
:布尔值,如果当前项目是最后一个项目则为true。
例如:
<tr th:each="item, itemStat : ${items}"> <td th:text="${itemStat.count}"></td> <td th:text="${item.name}"></td> <td th:text="${item.price}"></td> </tr>
3. 迭代数组和映射
对于数组和映射,循环语法与迭代集合类似:
数组:
<ul> <li th:each="element, index : ${array}"> <span th:text="${index}"></span>: <span th:text="${element}"></span> </li> </ul>
映射:
<ul> <li th:each="entry : ${map}"> <span th:text="${entry.key}"></span>: <span th:text="${entry.value}"></span> </li> </ul>
4. 条件循环
你可以在循环中使用th:if
来添加条件逻辑:
<tr th:each="item : ${items}" th:if="${item.price > 10}"> <td th:text="${item.name}"></td> <td th:text="${item.price}"></td> </tr>
这个例子只会渲染价格大于10的项。
5. 嵌套循环
你可以在一个循环内部嵌套另一个循环:
<tbody th:each="category : ${categories}"> <tr> <td th:text="${category.name}"></td> </tr> <tr th:each="item : ${category.items}"> <td th:text="${item.name}"></td> <td th:text="${item.price}"></td> </tr> </tbody>
这个例子首先遍历categories
,然后在每个类别下遍历其items
。