web-dev-qa-db-ja.com

フラグメント定義要素を含めずにThymeleafテンプレートを使用しますか?

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>
24
James Sumners

使用する 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>
48
Iwo Kucharski

または、th:blockdivの代わりに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として表示したときに見えます。

30

これを達成するさらに別の簡単な方法は、次に示すようにth:replace="fragments/main :: content/text()">を使用することです。 https://github.com/thymeleaf/thymeleaf/issues/451

あなたのfragments/main.htmlは同じままです

th:replaceindex.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"が機能しませんでした。

0
Alexis