将 Thymeleaf 片段作为参数传递给另一个片段时“选择器与选择器语法不匹配”

问题描述 投票:0回答:1

我想为所有页面提供一个共享模板,例如每个页面上都会张贴一个绿色框架。我有一个带有蓝色框架的索引页。所以我用片段

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])?

我做错了什么?

spring-mvc thymeleaf
1个回答
0
投票

看起来我犯了一个语法错误。这样就可以了:

<!-- 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>```
© www.soinside.com 2019 - 2024. All rights reserved.