web-dev-qa-db-fra.com

Pour chaque opérateur dans Thymeleaf

Je ne trouve pas de syntaxe pour la construction simple de for-each-loop dans le template Thymeleaf. Je ne suis pas satisfait avec juste th:each="" attribut, car il copie la balise dans laquelle il se trouve.

Ce que je recherche, c'est quelque chose comme:

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

quel est analogue de <c:forEach items="..." var="..."> ou <t:loop source="..." value="..."> dans Tapestry. Est-ce que quelque chose de semblable pour ça?

22
Andremoniy

Utilisation th:block comme indiqué dans le guide Thymeleaf

th:block est un simple conteneur d’attributs qui permet aux développeurs de modèles de spécifier les attributs qu’ils souhaitent. Thymeleaf exécutera ces attributs puis fera simplement disparaître le bloc sans laisser de trace.

Cela pourrait donc être utile, par exemple, lors de la création de tables itérées nécessitant plus d'un <tr> pour chaque élément:

<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

Le th:block La solution _ est certainement la meilleure solution, mais vous pouvez également utiliser th:remove="tag" afin de supprimer la balise contenant:

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

L'avantage de cette approche est que vous pouvez également passer une expression de Thymeleaf à th:remove afin de ne supprimer la balise que de manière conditionnelle, par ex. si vous voulez que quelques utilisateurs seulement soient inclus dans un <tbody>, en plus d’avoir d’autres utilisations intéressantes.

Here est la documentation de th:remove.

11
Raibaz