web-dev-qa-db-ja.com

Thymeleaf:th:eachを使用するときに外部タグを除外するにはどうすればよいですか?

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>

反復ごとに1つの<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})"/>

どうもありがとう。

13
July

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

問題を解決する方法を見つけました。簡単です。addth:remove="tag"外部タグに対応します。

1
July

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