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限制迭代次数。