Thymeleaf片段表达

时间:2017-02-11 02:49:45

标签: javascript jquery html thymeleaf

我正在使用thymeleaf将模板分割成头/主/页脚部分。为了在某​​些页面上包含样式表和javascript(但不在其他页面上),我使用片段表达式as explained here.

所以我的 head.html 看起来像是:

<!DOCTYPE html>
<html>
<head th:fragment="head(title,links,scripts)">
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"/>
    <title th:replace="${title}">Title placeholder</title>

    <!--/* Per-page placeholder for additional links */-->
    <th:block th:replace="${links} ?: ~{}" />
    <th:block th:replace="${scripts} ?: ~{}" />
</head>
<body>
</body>
</html>

这在我的主页 index.html 中使用如下:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="head :: head(~{::title},~{::link},~{::script})">
    <title th:text="#{label.pages.home.title}">Homepage</title>
    <link rel="stylesheet" href="/assets/css/jumbotron.css"/>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>

<body>
...
</body>
</html>

这样可以正常工作。脚本和链接标记显示在结果页面的标题中。然而,偶尔我想在正文的末尾(在</body>之前)使用脚本。如果我在该位置放置<script>....</script>,则在结果页面中会发生两件事。

  • 脚本出现在头部
  • 该脚本第二次出现在其原始位置

我怎样才能防止百里香将剧本放在头上?

1 个答案:

答案 0 :(得分:0)

片段表达式具有语法~{template :: selector}。您引用的原始文件和语法缩减为~{:: selector}。 Selector是XPath或CSS之类的表达式。为防止包含所有脚本,您应将范围缩小到head标记:~{:: head/script}