我们说我有两个Thymeleaf模板:
的index.html :
<!DOCTYPE html>
<html>
<head></head>
<body>
<header>foo</header>
<section>
<div th:replace="fragments/main :: content"></div>
</section>
<footer>bar</footer>
</body>
</html>
片段/ main.html中:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div th:fragment="content">
<p>This is the main content.</p>
</div>
</body>
</html>
如何阻止Tymeleaf在合成输出中包含定义片段的div
?也就是说,我如何让Thymleaf生成以下输出:
<!DOCTYPE html>
<html>
<head></head>
<body>
<header>foo</header>
<section>
<p>This is the main content.</p>
</section>
<footer>bar</footer>
</body>
</html>
而不是:
<!DOCTYPE html>
<html>
<head></head>
<body>
<header>foo</header>
<section>
<div>
<p>This is the main content.</p>
</div>
</section>
<footer>bar</footer>
</body>
</html>
答案 0 :(得分:40)
使用th:remove="tag"
。 (documentation)
<强>片段/ main.html中:强>
<!DOCTYPE html>
<html>
<head></head>
<body>
<div th:fragment="content" th:remove="tag">
<p>This is the main content.</p>
</div>
</body>
</html>
答案 1 :(得分:30)
或者,您可以尝试在th:block
中使用div
代替main.html
,例如:
<!DOCTYPE html>
<html>
<head></head>
<body>
<th:block th:fragment="content">
<p>This is the main content.</p>
</th:block>
</body>
</html>
但请注意,这会稍微改变main.html
在未经Thymeleaf预处理的情况下作为原始HTML查看时的外观。
答案 2 :(得分:0)
另一种简单的实现方法是使用th:replace="fragments/main :: content/text()">
,如下所示:https://github.com/thymeleaf/thymeleaf/issues/451
您的 fragments / main.html 保持不变
th:replace
属性在 index.html 中发生变化:
<!DOCTYPE html>
<html>
<head></head>
<body>
<header>foo</header>
<section>
<div th:replace="fragments/main :: content/text()"></div>
</section>
<footer>bar</footer>
</body>
</html>
也许5年前问这个问题时还没有这种方法,但是我想在这里添加它给那些偶然发现这个问题寻求解决方案的人。我遇到了类似的问题,th:remove="tag"
对我不起作用。