我需要在Thymeleaf
模板中有条件地关闭代码。比如,在迭代一些元素集合时,我必须将其中一些元素的系列包装成单个<div>
:
<div>...element1, element2, element3...</div>
<div>...element4...</div>
<div>...element5, element6...</div>
如果有条件标记关闭的某种方式存在,则可以存档。但我显然不能写</div th:if="...">
。如果它是jsp
我可以轻易地写出类似的内容:
<%if (condition) {%></div><%}%>
有任何想法如何解决这个问题?
编辑准确地说,我的元素不仅仅是字符串,它们是复杂的内部html块。
答案 0 :(得分:3)
我认为最好将数据表示为单独的列表,正如您在your previous answer中提到的那样。
但是,即使是好奇心,也有一种丑陋的解决方法可以实现与<%if (condition) {%></div><%}%>
类似的内容,就像你问的那样。
诀窍是将标记生成为转义文本:
<th:block th:if="${openTagCondition}" th:utext="'<div>'" />
<th:block th:if="${colseTagCondition}" th:utext="'</div>'" />
这只是出于好奇。我不建议使用此解决方法,因为它非常难以理解,会损害可维护性并且您可能会留下不平衡的标记。
答案 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