使用Thymeleaf模板而不包含片段定义元素?

时间:2014-02-25 19:12:01

标签: thymeleaf

我们说我有两个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>

3 个答案:

答案 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"对我不起作用。