小编典典

如何定义胸腺嘧啶片段

java

使用“模板修饰而不是包含”技术时,如何检查Thymeleaf片段是否已定义?

在以下 template.html 示例中,我只希望在定义片段时呈现script标签

<html th:fragment="page" xmlns:th="...">
  ...
  <div class="container" th:include="this :: content"></div>
  <script th:include="this :: script"></script>
  ...
</html>

但是在我的使用上面模板的 index.html 中,没有定义脚本片段,但是script标签仍然会渲染

<html th:include="template :: page">
  ...
  <div th:fragment="content">
    ...
  </div>
</html>

我尝试过th:if="#{this :: script}"但没有运气


阅读 212

收藏
2020-11-30

共1个答案

小编典典

我在Thymeleaf玩了一点(…),这是我的结论。

在下文中,我将使用tag任何给定的标签(divscriptspan等)和fragment可接受的片段语法(this :: scriptthis :: contenttemplate :: #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尝试将其替换为完整的片段,包括标记。有以下特殊情况:

  • 如果该片段不存在,则Thymeleaf不会插入任何内容
  • 如果片段由a标识th:fragment="id",则Thymeleaf会删除th:fragment(例如:<p th:fragment="foo">bar</p>gives <p>bar</p>,无论tag是什么)。
  • 如果片段是由dom元素标识的,则Thymeleaf保留dom元素(例如:<p id="foo">bar</p>gives <p id="foo">bar</p>,无论tag是什么)

因此,如果您只想在<script>片段存在时就包含该片段,则只需通过<script th:fragment ...>...</script>其存在来对其进行标识,并通过以下方式将其包含在布局中:

<script th:replace="this :: script"/>
2020-11-30