结合th:each和th:if时如何在Thymeleaf中获得过滤列表的大小?

时间:2019-10-11 08:05:49

标签: thymeleaf

我正在尝试获取循环的th:list的列表大小,在我使用th:if过滤掉一些数据之后,但这给了我完整的列表大小而不是过滤后的列表大小

假设事务列表的大小为5,并且包含3个我要过滤的类型,它仍将列表大小返回为5,而不是3。如果我打印出这些值,则仅显示3,所以我知道数据很好,百里香可以按预期过滤

<th:block th:each="transaction,iter : ${transactions}" th:object="${transaction}" th:if="${transaction.test} == 'test'">
<tr>
<td><span th:text="${iter.size}"></span></td>
</tr>
</th:block>

我希望输出为3,因为它的事务列表包含3个“测试”值和2个垃圾值。但是,它的大小为5而不是3。打印出这些值后,它将生成3行(按预期),但值为5(过滤后应为3)。

1 个答案:

答案 0 :(得分:0)

th:if不会更改列表。它只是控制是否显示一段HTML。

话虽如此,您可以使用collection selection完成此操作。例如,如下所示:

<tr th:with="filtered=${transactions.?[test == 'Test']}">
    <td th:text="${filtered.size()}" />
</tr>