我想为所有页面提供一个共享模板,例如每个页面上都会张贴一个绿色框架。我有一个带有蓝色框架的索引页。所以我用片段
fragments/whole_page.html
创建 whole_page
,它是从 pages/index.html
调用的,并以 ~{::index_page_content}
作为片段参数:
//controllers/TaskController.java
@Controller
@RequiredArgsConstructor
public class TaskController {
private final TasksService tasksService;
@GetMapping("/")
public String index(Model model) {
model.addAttribute("tasks", tasksService.getAllTasks());
return "pages/index";
}
}
<!-- templates/pages/index.html -->
<!DOCTYPE html>
<html
lang="en"
xmlns:th="http://www.thymeleaf.org"
th:replace="~{ fragments/whole_page.html :: whole_page(~{ :: index_page_content}}"
>
<div
th:fragment="index_page_content"
style="margin: 5px; padding: 5px; border: 2px solid blue;"
>
<p th:if="${tasks.size() == 0}">
No tasks stored at the moment
</p>
<p th:if="${tasks.size() > 0}">
There are <th:block th:text="${tasks.size()}" /> tasks stored at the moment
</p>
</div>
</html>
<!-- templates/fragments/whole_page.html -->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:fragment="whole_page(content)">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<div style="margin: 5px; padding: 5px; border: 2px solid green;">
<th:block th:replace="${content}" />
</div>
</body>
</html>
当我请求此页面时,我在控制台中收到一条错误消息:
java.lang.IllegalArgumentException: Invalid syntax in selector "whole_page(~{ :: #indexPageContent}": selector does not match selector syntax: ((/|//)?selector)?([@attrib="value" ((and|or) @attrib2="value")?])?([index])?
我做错了什么?
看起来我犯了一个语法错误。这样就可以了:
<!-- templates/pages/index.html -->
<!DOCTYPE html>
<html
lang="en"
xmlns:th="http://www.thymeleaf.org"
th:replace="~{fragments/whole_page.html :: whole_page(~{ :: indexPageContent})}"
>
<div th:fragment="indexPageContent" style="margin: 5px; padding: 5px; border: 2px solid blue;">
<p th:if="${tasks.size() == 0}">
No tasks stored at the moment
</p>
<p th:if="${tasks.size() > 0}">
There are <th:block th:text="${tasks.size()}" /> tasks stored at the moment
</p>
</div>
</html>```