是的,这完全有可能,尽管 Thymeleaf 的文档没有明确说明。
您所要做的就是使用 th:with 属性传递您的参数。可能还有其他方法,但这似乎是最直接的。
这是我的实现的精简版:
默认装饰器 - 片段/布局/default.html
<!doctype html>
<html xmlns:layout="http://www.thymeleaf.org" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:replace="fragments/header :: main"></div>
<div layout:fragment="content">
main content goes here
</div>
</body>
</html>
标题片段 - 片段/header.html
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div th:fragment="main">
<nav>
<ul>
<li><a href="#" th:classappend="${currentPage == 'home'} ? 'active'">Home Page</a></li>
<li><a href="#" th:classappend="${currentPage == 'about'} ? 'active'">About</a></li>
</ul>
</nav>
</div>
</body>
主页文件 - home.html
<!doctype html>
<html layout:decorator="layout/default" th:with="currentPage='home'"
xmlns:layout="http://www.thymeleaf.org/" xmlns:th="http://www.thymeleaf.org">
<body>
<div layout:fragment="content">
This is my home page content... thrilling, isn't it?
</div>
</body>
</html>
在这里,在 home.html 文件中,您可以看到我包含默认装饰器并使用 th:with 属性传递我的参数。我实际上并没有在我的布局装饰器中使用我的参数,但我在 header.html 中使用它,它包含在装饰器中。无需将它从装饰器传递到 header.html 片段,因为它已经在范围内。
也不需要对 header.html 中的 currentPage 变量进行 NULL 检查。从 home.html 中删除参数时,没有附加活动的 CSS 类。
如果我要渲染 home.html,我希望看到以下输出:
<!doctype html>
<html>
<body>
<nav>
<ul>
<li><a href="#" class="active">Home Page</a></li>
<li><a href="#">About</a></li>
</ul>
</nav>
<div>
This is my home page content... thrilling, isn't it?
</div>
</body>
</html>