2つの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>
fragments/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>
使用する th:remove="tag"
。 ( ドキュメント )
fragments/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>
または、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として表示したときに見えます。
これを達成するさらに別の簡単な方法は、次に示すように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"
が機能しませんでした。