Thymeleaf - 基于对象的 属性 迭代对象列表
Thymeleaf - Iterate Object list based on an object's property
我有一个产品对象列表,我想根据某些条件在 HTML 页面中对其进行迭代。我只想对产品进行迭代,产品类型为 'BAR'。我是这样做的。
<th:block th:if="${#strings.isEmpty(foo.destination)}" >
<div th:each ="product, prodStat:${foo.productList}" th:if="${product.type eq 'BAR'}" th:with="bar=${product}">
<div th:text="${bar.cityName}">London</div>
</div>
</th:block>
但现在我希望产品列表仅针对 前 5 'BAR' 个产品进行迭代。我怎样才能做到这一点?
您可以先使用 "SpEl Collection Selection" 语法将 productList
过滤为仅匹配类型 "BAR" 的元素。然后你可以使用迭代状态 prodStat
只显示前 5 个元素。像这样:
<th:block th:if="${#strings.isEmpty(foo.destination)}" >
<div th:each="product, prodStat:${foo.productList.?[#this.type eq 'BAR']}"
th:if="${prodStat.index} lt 5"
th:with="bar=${product}">
<div th:text="${bar.cityName}">London</div>
</div>
</th:block>
在上面您可以看到迭代现在是在 foo.productList.?[#this.type eq 'BAR']
上执行的,这是 productList
的过滤版本,仅包含具有该类型的元素(使用 #this.bar
引用)等于 'BAR'.
然后使用th:if
和迭代状态prodStat
限制迭代次数。
我有一个产品对象列表,我想根据某些条件在 HTML 页面中对其进行迭代。我只想对产品进行迭代,产品类型为 'BAR'。我是这样做的。
<th:block th:if="${#strings.isEmpty(foo.destination)}" >
<div th:each ="product, prodStat:${foo.productList}" th:if="${product.type eq 'BAR'}" th:with="bar=${product}">
<div th:text="${bar.cityName}">London</div>
</div>
</th:block>
但现在我希望产品列表仅针对 前 5 'BAR' 个产品进行迭代。我怎样才能做到这一点?
您可以先使用 "SpEl Collection Selection" 语法将 productList
过滤为仅匹配类型 "BAR" 的元素。然后你可以使用迭代状态 prodStat
只显示前 5 个元素。像这样:
<th:block th:if="${#strings.isEmpty(foo.destination)}" >
<div th:each="product, prodStat:${foo.productList.?[#this.type eq 'BAR']}"
th:if="${prodStat.index} lt 5"
th:with="bar=${product}">
<div th:text="${bar.cityName}">London</div>
</div>
</th:block>
在上面您可以看到迭代现在是在 foo.productList.?[#this.type eq 'BAR']
上执行的,这是 productList
的过滤版本,仅包含具有该类型的元素(使用 #this.bar
引用)等于 'BAR'.
然后使用th:if
和迭代状态prodStat
限制迭代次数。