あなたはこのようなことをすることができます。他のすべてのコンテンツが埋め込まれるページを作成するとします(main.html
)。
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3" xmlns="http://www.w3.org/1999/xhtml">
<div th:fragment="somePage">
<h1>${title}</h1>
</div>
</html>
目標は、コンテンツとmain.html
内<div th:include="${page} :: ${fragment}"></div>
を交換することである: - some-page.html
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3" xmlns="http://www.w3.org/1999/xhtml">
<div th:fragment="mainPage(page, fragment)">
<h4>Some header</h4>
<div th:include="${page} :: ${fragment}"></div>
<h4>Some footer</h4>
</div>
</html>
次に、あなたがあなたのmain.html
ページに埋め込まれますいくつかのページを作成したい:それはこのようになります。 some-page.html
から。コントローラーでは、これは次のようになります:
@Controller
public class DemoController {
@RequestMapping
public String somePage(Model model) {
// Note that you can easy pass parameters to your "somePage" fragment
model.addAttribute("title", "Woa this works!");
return "main :: mainPage(page='some-page', fragment='somePage')";
}
}
あなたが行く! main.html
のコンテンツを交換するたびに、コントローラ内の文字列内のpage
とfragment
のパラメータを変更するだけです。
@Branislavさん、ありがとうございましたが、コントローラのアクションが何かを返すと、コンテナは返された同じ名前のビューを検索します。 "main :: ...."のようなものは決して見つかりません。 – marherbi
@MohamedRedaArherbi試しましたか?私はそれを試して、ああそうです。コントローラメソッドからフラグメント名式を返すことができます。 "main :: mainPage(...)"は間違いなく合法です。 'main.html'ファイルから' mainPage'フラグメントを返します。 –
確かに、いくつかの進歩があり、それは解決策に近いですが、このマニアの問題は、コントローラがビューを返すと、メインページの前のコードをすべて削除することです(htmlタグ、headタグ、すべてのCSS ... ) – marherbi