2017-07-12 17 views
1

私はこのようになりますデータ構造を持っている:FreeMarkerの再帰的なネストされたリスト

public class Foo { 
    public Bar bar; 
    public List<Foo> foos = new ArrayList<>(); 
} 

はFooの各インスタンスは、Foo Sの任意の量を保持することができ、もちろん、今度はもっとFoo Sを含有することができるので、に。だから私はFreeMarkerをそのようなリストに通すことをどのようにするつもりですか?

+0

あなたは何する必要があるの?すべてのFooを印刷しますか? – user7294900

+0

もちろん、それは問題ありません。私は順序、深さ、分岐履歴を保持する必要があります(ab、ac、abdがある場合、dがbの子であるという情報を保持する必要があります)。 – Torque

答えて

3

FreeMarkerのマクロ(および機能)をサポート再帰を参照してくださいFreeMarkerのテンプレートからそれを呼び出します。したがって、このような何か:(http://try.freemarker.org/構文を使用して、それがList -sとFoo豆と同様に動作)

<#macro dumpFoo foo> 
    ${foo.bar} 
    <#list foo.foos as childFoo> 
    <@dumpFoo childFoo /> 
    </#list> 
</#macro> 

<@dumpFoo myFoo /> 

例データモデル:

myFoo = { 
    "bar": "root", 
    "foos": [ 
    { 
     "bar": "child 1", 
     "foos": [ 
     { 
      "bar": "child 1.1", 
      "foos": [] 
     } 
     ] 
    }, 
    { 
     "bar": "child 2", 
     "foos": [] 
    } 
    ] 
} 

出力:

root 
    child 1 
    child 1.1 
    child 2 
+0

この機能はまさに私が心に留めていたものです。ありがとう!私はFreemarkerのリストと再帰を検索するとXMLパスを導くので、私はそれを自分で見つけることに集中しませんでした。 – Torque

0

freemarkerには静的メソッドを使用できます。

この関数は、自分自身を印刷し、必要に応じて、リスト表示します

add public static printMe() { ... 
} 

のFooクラスプリントミーまたはdoSomethingの

に静的メソッドを追加します。

は今だけ

${statics["packageName.Foo"].printMe()} 

Accessing static methods

+0

これは本当に邪悪ですFreemarkerは完全には、私は言語の大部分を活用することはできません。 – Torque

関連する問題