我有一个'product'列表,我希望使用html模板显示为行表列表。
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
我找不到另一种方法来替换我的循环项目。
有人有办法解决这个问题吗?
答案 0 :(得分:10)
我明白了:
<table>
<tr th:each="product : ${products}" th:include="product :: productTemplate"
th:with="productName=${product.name}, productPrice=${product.price}"
th:remove="tag" />
</table>
在这里,我们可以将模板类保留在 tr 元素上(这就是我想要的)
<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>
中的official thymeleaf forum
答案 1 :(得分:0)
th:包括你正在寻找的东西。下面的代码适合我。我更喜欢将多个片段放在一个文件中,所以我在这里包含了它。
<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>
...