问题
The Thymeleaf 2.1.4 official doc demonstrates the for each
usage as below:
<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
...
</tr>
It generates one <tr>
in each iteration, which is perfect fit in this situation. However in my case I don't need the outer tag (here, <tr>
).
My use case is to generating <bookmark>
tag in a recursive way, no other tags include, and a <bookmark>
tag must contain a name and href attribute.
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:fragment="locationBookmark(location)">
<bookmark th:each="map : ${location.subMaps}">
<bookmark th:name="${map.name}"
th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})">
</bookmark>
</bookmark>
</div>
</body>
</html>
the including side:
<bookmark th:include="bookmark : locationBookmark(${rootLocation})"/>
Many thanks.
回答1:
Even if it can be done using th:remove="tag"
I would suggest you use th:block
<th:block th:each="map : ${location.subMaps}">
<bookmark th:name="${map.name}"
th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})">
</bookmark>
</th:block>
回答2:
I figured out how to solve the problem, it's easy, just addth:remove="tag"
to the outer tag will do.
回答3:
You can use a DIV
tag or any other HTML tag to loop with. This will not generate a TR
tag. But for the table to render correctly you need to have the TD
tags inside of TR
tags.
<div th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
</div>
来源:https://stackoverflow.com/questions/30914637/thymeleaf-how-to-exclude-outer-tag-when-using-theach