2017-09-12 30 views
0

現在、コンポーネントの作業を行っています。ページオブジェクトがnullであるかどうかをフィルタリングするためにif else文が必要です私の試みです:magnolia freemarker(.ftl)でobjectがnullの場合の定義方法

[#assign page = cmsfn.page(component)] 
[#if page IS NULL ] // not working... 
    [@cms.component content=cmsfn.asContentMap(component) editable=false/] 
[/#if] 

とページオブジェクトがnullの場合、この1

私がここでやろうとしています何
[#assign page = cmsfn.page(component)] 
[#if !page?has_content ] // not working... 
    [@cms.component content=cmsfn.asContentMap(component) editable=false/] 
[/#if] 

は、ある、コンポーネント胸が張り裂ける、これらのページオブジェクトは、JRC子供ノードですか、コンポーネントをレンダリングするときにこのタイプのノードが壊れてしまうので、フィルターをかけてp ageはnullでレンダリングされます。

提案がありますか?私にコード例を教えてください。 ありがとう

答えて

2

FreeMarker(2.x)のテンプレート言語はこれを持っています... quirk、nullという値はありません。したがって、nullを変数に格納することはできません。 foo.barの場合、barnullを返すJava getBar()に対応する場合、テンプレート言語に関する限りfooにはbarが含まれていません。そして、存在しないものを参照することは、null /欠損ハンドラー演算子を直接の参照式(foo.bar!'myDefault'またはfoo.bar??など)に適用しない限り、違法です。

したがって、最も簡単な方法は、[#if cmsfn.page(component)??]...[/#if]のような割り当てを避けることです。しかし時には受け入れられない場合もありますが、もう一度pageをもう一度ダウンロードする必要があります。次に、デフォルト以外のものと区別できるいくつかのデフォルトを使用することができます。 pageオブジェクトの場合、?has_contentにはtrueが与えられているとします(そして、奇妙なものを使用していない限り){}(空のハッシュ)のデフォルト値で十分です。 ?has_contentが偽であるデフォルト値を与えるので、exp!演算子は略語として使用できます。

[#assign page = cmsfn.page(component)!] 
[#if page?has_content] 
    [@cms.component content=cmsfn.asContentMap(component) editable=false/] 
    ... Do something with `page`, otherwise we need not use #assign. 
[#else] 
    ... Don't do anything with `page`, it's that strange default object. 
[/#if] 
関連する問題