2016-04-20 22 views
7

Non riesco a trovare la sintassi per la creazione di un semplice ciclo per ogni ciclo nel modello Thymeleaf. Non sono soddisfatto dell'attributo th:each="", perché copia il tag in cui si trova.Per ogni operatore in Thymeleaf

Quello che sto cercando è qualcosa di simile:

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

ciò che è analogo <c:forEach items="..." var="..."> o <t:loop source="..." value="..."> in Tapestry. È qualcosa di simile per quello?

risposta

14

Usa th:block come indicato nella guida Thymeleaf

th:block è un mero contenitore attributo che consente agli sviluppatori di template per specificare qualunque attributi che vogliono. Thymeleaf eseguirà questi attributi e quindi farà semplicemente sparire il blocco senza lasciare traccia.

quindi potrebbe essere utile, ad esempio, durante la creazione di tabelle iterata che richiedono più di un <tr> per ogni elemento:

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

La soluzione th:block è sicuramente il migliore, ma in alternativa si può anche provare a utilizzare th:remove="tag" al fine di rimuovere il tag contenente:

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

il vantaggio di questo approccio è che si può anche passare un'espressione Thymeleaf a th:remove per il rimuovere il tag in modo condizionale, ad es. se si desidera includere solo alcuni utenti in un <tbody>, oltre ad altri usi interessanti.

Here è la documentazione per th:remove.

+0

'th: remove' è quello che ho indovinato, ma non l'ho ancora provato :-) Grazie mille. – Andremoniy

+0

@ekemchitsiga è stato il primo, quindi la sua risposta sarà accettata. E anche +1 a te :) – Andremoniy