【问题标题】:Using th:block (fragments) in thymeleaf templates在 thymeleaf 模板中使用 th:block (fragments)
【发布时间】:2020-06-13 15:52:40
【问题描述】:

我对 Thymeleaf 和 SpringBoot 还是有点陌生​​。

我一直在尝试使用 thymeleaf 片段将包含所有 javascript 映射的块注入页面 - dashboardAdmin.html。

我已经能够使用常规片段正确地注入带有块的片段,但是由于我必须注入多个脚本标签,这些标签不在 html 模板中的任何标签内,所以我无法使用常规方法.

我发现了一个类似的问题here 并遵循了提供的具体解决方案,但仍然没有成功,我已经添加了依赖项。也许有某种我不知道的语法错误。 由于我找不到太多关于此的参考资料,任何人都可以在这方面给我建议吗?

这是 fragment.html,其中包含要插入其他页面的所有模板

<body>
<th:block layout:fragment="script">
    <script th:src="@{/vendor/login_v14/vendor/jquery/jquery-3.2.1.min.js}"></script>
    <!-- Bootstrap 4 -->
    <script th:src="@{/vendor/bootstrap/js/bootstrap.bundle.min.js}"></script>
    <!-- jsGrid -->
    <script th:src="@{/vendor/jsgrid/demos/db.js}"></script>
    <script th:src="@{/vendor/jsgrid/jsgrid.min.js}"></script>
    <!-- AdminLTE App -->
    <script th:src="@{/js/main.js}"></script>
</th:block>
</body>

虽然这是我将块注入到的页面模板 - dashboardAdmin.html

<!DOCTYPE html>
<html lang="fr" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html"
             xmlns:layout="http://www.w3.org/1999/xhtml"
             layout:decorate="~{fragments/fragments}">
<head th:replace="fragments/fragments :: head">
</head>
<body class="hold-transition sidebar-mini">

<!--js scripts-->
<th:block layout:fragment="script">

</th:block>
</body>

如果有人能告诉我我在这里做错了什么,将不胜感激:D!

【问题讨论】:

    标签: spring-boot thymeleaf


    【解决方案1】:

    我认为您可以简化 HTML 以获得所需的内容。

    在您的dashboardAdmin.html 中,在您要放置片段的位置插入类似这样的内容:

    <div th:replace = "fragment.html :: script1">
    </div>
    

    (如果您的片段 HTML 文件位于资源目​​录中的其他位置,您可能需要调整 "fragment.html"。)

    在您的fragment.html 中,您可以使用如下内容:

    <th:block th:fragment="script1">
        <div>your content here, instead of this div</div>
    </th:block>
    
    <th:block th:fragment="script2">
        <div>your content here, instead of this div</div>
    </th:block>
    

    在我的例子中,这是片段文件的全部内容 - 但显然您可以将我的 &lt;div&gt;...&lt;/div&gt; 替换为您问题中的所有 HTML。

    为了说明,我在上面的示例中包含了 2 个单独的命名片段。

    “script1”块的内容(但不是包含块本身)将被插入到您的dashboardAdmin.html 页面中。

    如果我正确理解了您的问题,应该就这么简单。基本上,该方法应该与您提到您已经能够将片段插入其他 HTML 文件的方法没有什么不同。

    【讨论】:

    • 谢谢!我已经尝试了你的建议并且它有效。我只是不明白如何 th:block 并且文件路径是个问题。
    猜你喜欢
    • 2014-08-29
    • 2016-06-23
    • 2016-12-28
    • 2016-08-28
    • 2017-02-22
    • 2018-11-27
    • 2019-11-11
    • 2017-09-21
    • 2016-01-26
    相关资源
    最近更新 更多