2017-07-19 8 views
1

Thymeleaf 3では、ページからテンプレートへのフラグメントを~{:: selector}の構文で渡すことができます。Thymeleaf 3フラグメント表現では、どのような操作と構文が可能ですか?

そのオブジェクトではどのような操作が可能ですか?

断片は、式の中で使用することができます。

<div th:fragment="name(arg)"> 
    <div th:replace="${arg} :? _"></div> 
</div> 

は、私のようなものでフラグメント内のフラグメントの一部のみを抽出することができます(次は正しくない構文です!!):

<div th:fragment="name(arg)"> 
    <div th:replace="${arg :: script} :? _"></div> 
    <div th:replace="${arg}.filter('script'} :? _"></div> 
    <div th:replace="${xpath(${arg},'script')} :? _"></div> 
</div> 

UPDATE Iどのようなフラグメント表現がどのように解決されるかを知る:

<th:block th:text="${bodyContent.class}" /> 

org.thymeleaf.standard.expression.Fragmentです。それは持っている:toString()またはwrite(Writer writer)を経由してレンダリングすることができ

<th:block th:text="${bodyContent.templateModel.class}" /> 

TemplateModelを。私は簡単な方法でフィルタをかけることができませんFragment内容...

答えて

0

私が使ったのはThymeleaf templates - Is there a way to decorate a template instead of including a template fragment?です。

Thymeleaf v2.1および3では、テンプレート/フラグメントミックスを参照することができます。

<html lang="en" xmlns:th="http://www.thymeleaf.org"> 
    <body> 
     <nav></nav> 
     <div th:replace="this :: body"/> 
    </body> 
</html> 

とページへ:上記のコード

<html lang="en" xmlns:th="http://www.thymeleaf.org" 
     th:replace="thymeleaf/layout/default :: html"> 
    <body> 
     XXX 
    </body> 
</html> 

bodyのテンプレートにテンプレートから参照CSSセレクタとして<body><nav></nav>の無限のシーケンスを生成する

は、テンプレートに見てみましょう。ページへの参照を移動するには

私は、より複雑なCSSスタイルセレクターを追加:

...私はセレクタマッチングに同じスコープにテンプレートとページを持つことが可能であるかわかりませんが、それは動作します

<html lang="en" xmlns:th="http://www.thymeleaf.org" class="htmlFrag"> 
    <body> 
     <nav></nav> 
     <div th:replace="this :: html[!class]/body"/> 
    </body> 
</html> 

を私が持っている

<html lang="en" xmlns:th="http://www.thymeleaf.org" class="htmlFrag"> 
    <head> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 

     <title th:text="~{::html[!class]/head/title/text()}"></title> 

     <link rel='stylesheet' href='/webjars/..."> 
     <div th:replace="this :: html[!class]/head/link"/> 

     <script src="/webjars/..."></script> 
     <div th:replace="this :: html[!class]/head/script"/> 
    </head> 
    <body> 
     <nav></nav> 
     <div th:replace="this :: html[!class]/body"/> 
    </body> 
</html> 

UPDATE:CSS/JSハンドリングを使用した高度なテンプレートのように表すことができ

開発者からの応答https://github.com/thymeleaf/thymeleaf/issues/626

Thymeleafは、プルベースまたはフラグメント包含ベースのレイアウトアーキテクチャを使用するか、デフォルトで使用します。

Layout Dialectでは、階層レイアウトスタイルを使用することができます。これを行うことが望ましいです。

関連する問題