2015-06-18 3 views
7

Официальный документ Thymeleaf 2.1.4 демонстрирует for each использование, как показано ниже:Thymeleaf: Как исключить внешний тег при использовании 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> 

Он генерирует один <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})"/> 

Большое спасибо.

+0

Можете ли вы предоставить образец тега вы хотите, чтобы не закрывать от внешнего тега? –

+0

@PavelUvarov Мой прецедент добавлен, см. Мой вопрос. – July

+0

Позвольте мне угадать: вы хотите сделать n-leveled дочерние теги? Я так думаю, потому что: bookmark не является тегом html и потому, что не рекомендуется закрывать теги с контентом. Если я прав, вы должны создать и использовать некоторый подшаблон рекурсивным образом. Я не в хорошем состоянии в ThymeLeaf, чтобы сказать, как вы должны это делать, но я точно знаю, что это возможно - внимательно посмотрите их документы. –

ответ

20

Даже если это может быть сделано с помощью 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> 
+0

Рад узнать, спасибо огромное – July

+0

@Xipo Я исправил до .. надеюсь, что это правильно для всех версий Thymeleaf, но поскольку XML лежит в основе ... –

0

Вы можете использовать тег 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

Я хочу полностью удалить тег, а не менять его имя. – July

0

Я понял, как решить эту проблему, это легко, просто добавьте th:remove="tag" к внешней метке будет делать.

Смежные вопросы