java - Thymeleaf 片段有时不起作用

标签 java spring-boot thymeleaf

在我的 Springboot 项目中,我包含了两个 thymeleaf 片段(head、navigator)。如果我删除导航器,代码可以正常工作并且 head 包含在页面中,否则会导致此错误。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
    xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head th:replace ="fragments::head" />
<body>
    <div th:replace ="fragments::navigator" />

    <div class="container text-center">
    <h1>Welcome to CrDr</h1>
    <h3><a th:href="@{/users}">List of Users</a></h3>
    <h3><a th:href="@{/register}">Register</a></h3>
    <h3><a th:href="@{/login}">Login</a></h3>
    <h3><a th:href="@{/daybooks}">Daybook</a></h3>
    </div>
</body>
</html>

错误:

There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates/index.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/index.html]")
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
Caused by: org.attoparser.ParseException: Error resolving fragment: "~{fragments :: navigator}": template or fragment could not be resolved (template: "index" - line 6, col 7)
    at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
    at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
    ... 102 more
Caused by: org.thymeleaf.exceptions.TemplateInputException: Error resolving fragment: "~{fragments :: navigator}": template or fragment could not be resolved (template: "index" - line 6, col 7)
    at org.thymeleaf.standard.expression.FragmentExpression.resolveExecutedFragmentExpression(FragmentExpression.java:619)
    at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)

fragments.html 内容:

<html xmlns:th="http://www.thymeleaf.org">
<head th:fragments = "head" >
    <meta charset="ISO-8859-1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title> [[${pageTitle}]] </title>
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>

        <div th:fragments="navigator" >
    <div class="navbar">
  <a class="active" href="#"><i class="fa fa-fw fa-home"></i> Home</a> 
  <a th:href="@{/daybooks}"><i class="fa fa-fw fa-search"></i> Daybook</a> 
  <a th:href="@{/login}"><i class="fa fa-fw fa-envelope"></i> Contact</a> 
  <a th:href="@{/login}"><i class="fa fa-fw fa-user"></i> Login</a>
        </div>
</div>
<body>
</body>
</html>

我在这里做错了什么?

最佳答案

你只是有几个错别字。

  1. 您尝试包含的片段是 navigator,但在片段文件中,该片段定义为 nav_bar。使用相同的片段名称。
  2. 您的片段名称位于 th:fragments 属性中设置的“fragments.html”文件中,但需要位于 th:fragment attribute 中.

所以工作代码可能看起来像......

<html xmlns:th="http://www.thymeleaf.org">
<head th:fragment = "head" >
    <meta charset="ISO-8859-1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title> [[${pageTitle}]] </title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>    
    <div th:fragment="navigator" >
        <div class="navbar">
        <a class="active" href="#"><i class="fa fa-fw fa-home"></i> Home</a> 
        <a th:href="@{/daybooks}"><i class="fa fa-fw fa-search"></i> Daybook</a> 
        <a th:href="@{/login}"><i class="fa fa-fw fa-envelope"></i> Contact</a> 
        <a th:href="@{/login}"><i class="fa fa-fw fa-user"></i> Login</a>
        </div>
    </div>
</body>
</html>

关于java - Thymeleaf 片段有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66577930/

相关文章:

java - 在Java中,有没有办法给一个对象字段起别名,让它有两个名字?

java - Spring MVC : Neither BindingResult nor plain target object for bean name 'user' available as

java - maven jetty 插件中找不到包

Java - 是否可以将 JMenuBar 添加到 JFrame 的装饰窗口?

parsing - 空安全长值

java - 我如何知道选择哪个 Maven 依赖版本?

java - #java.lang.NoClassDefFoundError : org/apache/commons/digester/Digester

java - 为什么运行单元测试时@Value总是为空?

java - Thymeleaf 自定义方言不起作用

html - 使用 "if"条件的 thymeleaf 的 Spring 安全性