2015-08-25 4 views
1

У меня есть список объектов продукта, и я хочу повторить его на HTML-странице, основываясь на некоторых условиях. Я хочу повторить это только для продуктов, тип продукта которых - «BAR». Я сделал это следующим образом.Thymeleaf - Iterate Список объектов, основанный на свойстве объекта

<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» продуктов только. Как я могу это достичь?

ответ

1

Вы можете сначала использовать синтаксис "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.

Смежные вопросы