2016-10-27 27 views
3

私はThymeleafテンプレートエンジンの新機能です。私はSpring BootとSpring MVCでアプリケーションを作っています。私は設定のためにapplication.propertiesと一緒に働いています。複数の内容を持つThymeleafレイアウト

は、私は多くのファイルにのみONEレイアウトが、内容を書くことができる方法を知りたい:すでに、ヘッダー、フッターを持っていレイアウトを使用する例content1.htmlcontent2.htmlなどのためにと。

可能であれば、レイアウトから置き換えられるコンテンツファイルをコントローラからどのように送信できますか?

答えて

3

あなたはこのようなことをすることができます。他のすべてのコンテンツが埋め込まれるページを作成するとします(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のコンテンツを交換するたびに、コントローラ内の文字列内のpagefragmentのパラメータを変更するだけです。

+0

@Branislavさん、ありがとうございましたが、コントローラのアクションが何かを返すと、コンテナは返された同じ名前のビューを検索します。 "main :: ...."のようなものは決して見つかりません。 – marherbi

+0

@MohamedRedaArherbi試しましたか?私はそれを試して、ああそうです。コントローラメソッドからフラグメント名式を返すことができます。 "main :: mainPage(...)"は間違いなく合法です。 'main.html'ファイルから' mainPage'フラグメントを返します。 –

+0

確かに、いくつかの進歩があり、それは解決策に近いですが、このマニアの問題は、コントローラがビューを返すと、メインページの前のコードをすべて削除することです(htmlタグ、headタグ、すべてのCSS ... ) – marherbi

関連する問題