如何在使用"template decoration instead of inclusion" technique?
时检查是否定义了Thymeleaf片段在 template.html 的下面示例中,我只希望在定义片段时呈现脚本标记
<html th:fragment="page" xmlns:th="...">
...
<div class="container" th:include="this :: content"></div>
<script th:include="this :: script"></script>
...
</html>
但是在我的 index.html 中使用上面的模板,没有定义脚本片段,但脚本标记仍将呈现
<html th:include="template :: page">
...
<div th:fragment="content">
...
</div>
</html>
我已经尝试th:if="#{this :: script}"
但没有运气
答案 0 :(得分:1)
我和Thymeleaf玩了一点(...),这是我的结论。
在下文中,我将tag
用于任何给定标记(div
,script
,span
等)和fragment
可接受的片段语法(this :: script
,this :: content
,template :: #menu
等。)
当您使用<tag th:include="fragment"/>
时,Thymeleaf会产生<tag>...</tag>
。如果它不存在,则内容为空,显示<tag></tag>
。如果片段存在,则内容将成为片段的内容。例如,使用<div th:"other :: #foo/>
片段<p id="foo">bar</p>
可以<div>bar</div>
当您使用<tag th:replace="fragment"/>
时,Thymeleaf会尝试将其替换为包含完整片段的标记。以下特殊情况:
th:fragment="id"
标识,则Thymeleaf会删除th:fragment
(例如:<p th:fragment="foo">bar</p>
提供<p>bar</p>
,无论tag
是什么)。<p id="foo">bar</p>
给出<p id="foo">bar</p>
,无论tag
是什么)因此,如果您希望仅在<script>
片段存在时添加<script th:fragment ...>...</script>
片段,则必须在<script th:replace="this :: script"/>
存在时对其进行识别,并将其包含在您的布局中:
{{1}}