在Thymeleaf有条件地关闭标签

时间:2016-04-20 14:53:15

标签: spring spring-mvc conditional thymeleaf

我需要在Thymeleaf模板中有条件地关闭代码。比如,在迭代一些元素集合时,我必须将其中一些元素的系列包装成单个<div>

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

如果有条件标记关闭的某种方式存在,则可以存档。但我显然不能写</div th:if="...">。如果它是jsp我可以轻易地写出类似的内容:

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

有任何想法如何解决这个问题?

编辑准确地说,我的元素不仅仅是字符串,它们是复杂的内部html块。

3 个答案:

答案 0 :(得分:3)

我认为最好将数据表示为单独的列表,正如您在your previous answer中提到的那样。

但是,即使是好奇心,也有一种丑陋的解决方法可以实现与<%if (condition) {%></div><%}%>类似的内容,就像你问的那样。

诀窍是将标记生成为转义文本:

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

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

这只是出于好奇。我不建议使用此解决方法,因为它非常难以理解,会损害可维护性并且您可能会留下不平衡的标记。

答案 1 :(得分:0)

我找到了解决方法。应该包含在单个<div>中的一系列块应该表示为模型内的单独列表。说,我有Element类来描述我的element块。所以,我的模型应该是:

List<Element> elementGroups

我必须为它创建双循环:

<div th:each="group : ${elementGroups}">
    <th:block th:each="element : ${group}">
       ...
    </th:block>
</div>

答案 2 :(得分:-2)

将条件逻辑向上移动一层

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

请查看此处的文档:http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#using-theach