I can not find syntax for building simple for-each-loop in Thymeleaf
template.
I'm not satisfied with just th:each=""
attribute, because it copies tag in which it's located.
What I'm looking for is something like:
<th:foreach th:each="...">
...block to be repeated...
</th>
what is analogue of <c:forEach items="..." var="...">
or <t:loop source="..." value="...">
in Tapestry
. Is anything similar for that?
Use th:block
as stated in the Thymeleaf guide
th:block
is a mere attribute container that allows template developers to specify whichever attributes they want. Thymeleaf will execute these attributes and then simply make the block disappear without a trace.
So it could be useful, for example, when creating iterated tables that require more than one <tr>
for each element:
<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>
The th:block
solution is definitely the best one, but alternatively you can also try using th:remove="tag"
in order to remove the containing 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>
The benefit of this approach is that you can also pass a Thymeleaf expression to th:remove
in order to only remove the tag conditionally, e.g. if you want only some users to be included in a <tbody>
, besides having other interesting uses.
Here is the documentation for th:remove
.