web-dev-qa-db-ja.com

Thymeleafの各演算子について

Thymeleafテンプレートに単純なfor-each-loopを構築するための構文が見つかりません。 th:each=""属性だけでは満足できません。これは、それが配置されているタグをコピーするためです。

私が探しているのは次のようなものです:

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

Tapestry<c:forEach items="..." var="...">または<t:loop source="..." value="...">の類似物。それに似たものはありますか?

22
Andremoniy

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>
44
ekem chitsiga

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>に含めたい場合。

ここth:removeのドキュメントです。

11
Raibaz