2013-05-29 3 views
3

У меня есть список «продукта», который я хочу показать как список таблицы строк, используя шаблон html.Объединить th: каждый с элементом шаблонов с использованием Thymeleaf

Шаблон HTML выглядит следующим образом:

<tr th:fragment="productTemplate"> 
    <td th:text="${productName}">product name</td> 
    <td th:text="${productprice}>product price</td> 
</tr> 

Вот что я сделал:

<table> 
    <tr th:each="product : ${products}" th:substituteby="product :: productTemplate" th:with="productName=*{name}, productPrice=*{price}" /> 
</table> 

Если я использую th:include, будет тр вложенного каждые tr Если я использую th:substituteby, заменяющий имеет приоритет на th:each

Я не могу найти способ заменить элементы петли на Другие.

У кого-нибудь есть решение для этого?

ответ

9

Я получил его:

<table> 
    <tr th:each="product : ${products}" th:include="product :: productTemplate" 
     th:with="productName=${product.name}, productPrice=${product.price}" 
     th:remove="tag" /> 
</table> 

И здесь, мы можем держать шаблонный класс на т.р. элемента (то, что я хотел)

<tbody th:fragment="productTemplate"> 
    <tr class="my-class"> 
    <td th:text="${productName}">product name</td> 
    <td th:text="${productPrice}">product price</td> 
    </tr> 
</tbody> 

вот результат:

<table> 
    <tr class="my-class"> 
    <td>Lettuce</td> 
    <td>12.0</td> 
    </tr> 
    <tr class="my-class"> 
    <td>Apricot</td> 
    <td>8.0</td> 
    </tr> 
</table> 

danielfernandez от official thymeleaf forum

0

th: include - это то, что вы ищете. Код ниже работает для меня. Я предпочитаю помещать несколько фрагментов в один файл, поэтому я включил это здесь.

<table> 
    <tr th:each="product : ${products}" th:include="/fragments/productFragment :: productRow" /> 
</table> 
... 

/fragments/productFragment.html 
... 
<tr th:fragment="productRow"> 
    <td th:text="${product.productName}">product name</td> 
    <td th:text="${product.productPrice}">product price</td> 
</tr> 
...