Thymeleaf:如何在使用th时排除外部标签:每个?

时间:2015-06-18 11:52:48

标签: java template-engine thymeleaf

Thymeleaf 2.1.4官方文档演示for each用法如下:

 <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>

它在每次迭代中生成一个<tr>,这非常适合这种情况。但是在我的情况下,我不需要外部标记(此处为<tr>)。

我的用例是以递归方式生成<bookmark>标记,不包含其他标记,<bookmark>标记必须包含名称和href属性。

<!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>

包括方:

<bookmark th:include="bookmark : locationBookmark(${rootLocation})"/>

非常感谢。

4 个答案:

答案 0 :(得分:29)

即使可以使用th:remove="tag"完成,我建议您使用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>

答案 1 :(得分:1)

我想出了如何解决问题,这很简单,只需将th:remove="tag"添加到外部标记即可。

答案 2 :(得分:0)

您可以使用DIV标记或任何其他HTML标记进行循环。这不会生成TR标记。但是要使表格正确呈现,您需要在TD标记内添加TR标记。

<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>

答案 3 :(得分:0)

这并非OP所要求的,但对某些人可能有用:

还可以有条件地删除标签:

<div class="myConditionalOuterDiv" th:remove="${condition}? tag"}> 
    <span> I'm always there </span>
</div>

这会删除父元素,但将子元素留在原处。

来源here