在我的 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>
我在这里做错了什么?
最佳答案
你只是有几个错别字。
- 您尝试包含的片段是
navigator
,但在片段文件中,该片段定义为nav_bar
。使用相同的片段名称。 - 您的片段名称位于
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/