使用Thymeleaf 3,可以通过~{:: selector}
语法将片段从页面传递到模板。
该对象可以进行哪种操作?
片段可以在表达式中使用:
<div th:fragment="name(arg)">
<div th:replace="${arg} :? _"></div>
</div>
我是否可以使用类似的方式提取片段内部分片段(以下是不正确的语法!!):
<div th:fragment="name(arg)">
<div th:replace="${arg :: script} :? _"></div>
<div th:replace="${arg}.filter('script'} :? _"></div>
<div th:replace="${xpath(${arg},'script')} :? _"></div>
</div>
UPDATE 我内省了解决了什么片段表达式:
<th:block th:text="${bodyContent.class}" />
是org.thymeleaf.standard.expression.Fragment。它有:
<th:block th:text="${bodyContent.templateModel.class}" />
TemplateModel可以通过toString()
或write(Writer writer)
呈现。我没有看到过滤Fragment
内容的简便方法......
答案 0 :(得分:0)
我看到了我尝试使用的Thymeleaf templates - Is there a way to decorate a template instead of including a template fragment?技术。
Thymeleaf v2.1和3允许将模板/片段混合引用到自身。
让我们看看模板:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<nav></nav>
<div th:replace="this :: body"/>
</body>
</html>
和页面:
<html lang="en" xmlns:th="http://www.thymeleaf.org"
th:replace="thymeleaf/layout/default :: html">
<body>
XXX
</body>
</html>
上面的代码生成无限序列<body><nav></nav>
作为CSS选择器从模板引用到body
的模板。
要移动对页面的引用,我添加了更复杂的CSS样式选择器:
<html lang="en" xmlns:th="http://www.thymeleaf.org" class="htmlFrag">
<body>
<nav></nav>
<div th:replace="this :: html[!class]/body"/>
</body>
</html>
我不确定如何将模板和页面放在相同的范围内以进行选择器匹配,但它有效......
使用CSS / JS处理的高级模板可以表示为:
<html lang="en" xmlns:th="http://www.thymeleaf.org" class="htmlFrag">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title th:text="~{::html[!class]/head/title/text()}"></title>
<link rel='stylesheet' href='/webjars/...">
<div th:replace="this :: html[!class]/head/link"/>
<script src="/webjars/..."></script>
<div th:replace="this :: html[!class]/head/script"/>
</head>
<body>
<nav></nav>
<div th:replace="this :: html[!class]/body"/>
</body>
</html>
更新我得到了开发者https://github.com/thymeleaf/thymeleaf/issues/626
的答复Thymeleaf使用基于拉取或基于片段包含的布局架构或默认情况。
使用Layout Dialect可以使用分层布局样式,并且最好这样做。