对于Thymeleaf的每个运营商

时间:2016-04-20 13:01:29

标签: spring spring-mvc for-loop foreach thymeleaf

我找不到在Thymeleaf模板中构建简单for-each-loop的语法。 我对th:each=""属性不满意,因为它复制了它所在的标记。

我正在寻找的是:

<th:foreach th:each="...">
...block to be repeated...
</th>

<c:forEach items="..." var="..."><t:loop source="..." value="...">Tapestry的类似内容。有什么相似的吗?

2 个答案:

答案 0 :(得分:39)

使用Thymeleaf指南中所述的th:block

th:block是一个纯粹的属性容器,允许模板开发人员指定他们想要的任何属性。 Thymeleaf将执行这些属性,然后简单地使块消失而无痕迹。

因此,例如,在为每个元素创建需要多个<tr>的迭代表时,它可能很有用:

<table>
   <th:block th:each="user : ${users}">
      <tr>
         <td th:text="${user.login}">...</td>
         <td th:text="${user.name}">...</td>
      </tr>
      <tr>
         <td colspan="2" th:text="${user.address}">...</td>
      </tr>
   </th:block>
</table>

答案 1 :(得分:11)

th:block解决方案肯定是最好的解决方案,但您也可以尝试使用th:remove="tag"删除包含的标记:

<table>
   <tbody th:each="user : ${users}" th:remove="tag">
      <tr>
         <td th:text="${user.login}">...</td>
         <td th:text="${user.name}">...</td>
      </tr>
      <tr>
         <td colspan="2" th:text="${user.address}">...</td>
      </tr>
   </tbody>
</table>

此方法的好处是您还可以将Thymeleaf表达式传递给th:remove,以便仅有条件地删除标记,例如如果你只希望某些用户被包含在<tbody>中,除了有其他有趣的用途之外。

Hereth:remove的文档。