如何检查Thymeleaf片段已定义

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

在下面的template.html示例中,我只希望在定义片段时呈现脚本标记

 ... 
...

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

  ... 
...

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

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

在下文中,我将对任何给定标记( divscriptspan等)使用tag ,并对可接受的片段语法进行分段( this :: scriptthis :: contenttemplate :: #menu等)

当你使用 ,Thymeleaf会产生一个... 。 如果它不存在,则内容为空,给出 。 如果片段存在,则内容将成为片段的内容。 例如,使用

表示片段

bar

给出

bar

当您使用 ,Thymeleaf会尝试将其替换为包含的完整片段,标记。 以下特殊情况:

  • 如果片段不存在,Thymeleaf不会插入任何内容
  • 如果片段由th:fragment="id" ,则Thymeleaf删除th:fragment (例如:

    bar

    给出

    bar

    ,无论如何tag是)。

  • 如果片段由dom元素标识,则Thymeleaf保留dom元素(例如:

    bar

    给出

    bar

    ,无论tag是什么)

因此,如果您希望仅在存在的情况下包含片段,则只需通过来识别它,并将其包含在您的布局中: