2015-06-18 27 views
7

Thymeleaf 2.1.4 oficjalny dokument demonstruje wykorzystanie for each jak poniżej:Thymeleaf: Jak wykluczyć zewnętrzny znacznik przy użyciu th: 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> 

Generuje jedną <tr> w każdej iteracji, co jest idealnym rozwiązaniem w tej sytuacji. Jednak w moim przypadku nie potrzebuję zewnętrznego znacznika (tutaj, <tr>).


Moje przypadek użycia jest do generowania <bookmark> tag w rekurencyjnej sposób, żadne inne znaczniki obejmują, a <bookmark> tag musi zawierać nazwę i atrybut 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> 

tym strona:

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

Dziękujemy.

+0

można dostarczyć próbkę tagu chcesz nie blisko tagu zewnętrznej? –

+0

@PavelUvarov Mój przypadek użycia został dodany, zobacz moje pytanie. – July

+0

Niech zgadnę: chcesz n-poziomowe tagi dla dzieci? Myślę, że tak, ponieważ: zakładka nie jest tagiem html i nie zaleca się, aby nie zamykać tagów z treścią. Jeśli mam rację - powinieneś utworzyć i użyć jakiegoś pod-szablonu w rekursywny sposób. Nie jestem dobry w ThymeLeaf, żeby powiedzieć, jak powinieneś to zrobić, ale na pewno wiem, że to jest możliwe - proszę uważnie przyjrzyj się swoim dokumentom. –

Odpowiedz

20

Nawet jeśli można to zrobić za pomocą th:remove="tag" Proponuję użyć 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> 
+0

Cieszę się, że bardzo dziękuję – July

+0

@Xipo Poprawiłem na .. mam nadzieję, że jest poprawne dla wszystkich wersji Thymeleaf, ale ponieważ XML leży u podstaw ... –

0

Możesz użyć znacznika DIV lub dowolnego innego znacznika HTML do zapętlenia. Nie spowoduje to wygenerowania znacznika TR. Aby jednak poprawnie renderować tabelę, musisz mieć tagi TD wewnątrz znaczników .

<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

To, czego chcę, to całkowite usunięcie tagu, a nie zmiana jego nazwy. – July

0

zorientowali się, jak rozwiązać ten problem, to jest proste, wystarczy dodać th:remove="tag" do zewnętrznej tag zrobi.