Мне нужно условно закрыть тег в моем шаблоне Thymeleaf. Скажем, во время итерации некоторой коллекции элементов мне нужно объединить ряд некоторых из них в один <div>:

<div>...element1, element2, element3...</div>
<div>...element4...</div>
<div>...element5, element6...</div>

Это можно было бы заархивировать, если бы существовал какой-то способ условного закрытия тегов. Но я явно не могу написать </div th:if="...">. Если бы это было jsp, я мог бы легко написать что-нибудь вроде:

<%if (condition) {%></div><%}%>

Есть идеи, как решить эту проблему?

РЕДАКТИРОВАТЬ Если быть точным, мои элементы - это не просто строки, это сложные внутренние блоки html.

7
Andremoniy 20 Апр 2016 в 17:53

3 ответа

Лучший ответ

Я нашел обходной путь. Серии блоков, которые должны быть объединены в один <div>, должны быть представлены в виде отдельных списков внутри модели. Скажем, у меня есть класс Element, который описывает мой блок element. Итак, моя модель должна быть такой:

List<Element> elementGroups

И мне нужно создать для него двойной цикл:

<div th:each="group : ${elementGroups}">
    <th:block th:each="element : ${group}">
       ...
    </th:block>
</div>
1
Andremoniy 21 Апр 2016 в 12:47

Я думаю, что лучше представлять данные в виде отдельных списков, как вы упомянули в предыдущем ответе.

Но даже из любопытства есть уродливый обходной путь для достижения чего-то похожего на <%if (condition) {%></div><%}%>, как вы просили.

Хитрость заключается в том, чтобы создать тег как экранированный текст:

<th:block th:if="${openTagCondition}" th:utext="'&lt;div&gt;'" /> 

<th:block th:if="${colseTagCondition}" th:utext="'&lt;/div&gt;'" /> 

Это просто из любопытства. Я не рекомендую использовать этот обходной путь, так как он довольно нечитаемый, вредит ремонтопригодности и вы можете оставить несбалансированные теги.

6
Community 23 Май 2017 в 12:33

Переместить условную логику на один уровень вверх

<body th:each="...">
    <div></div>
</body>

Взгляните на документацию здесь: http: //www.thymeleaf .org / doc / tutorials / 2.1 / usingthymeleaf.html # using-theach

-2
ndrone 20 Апр 2016 в 18:18