2011-08-07 17 views
5

私はマスターDTOのJSF再帰的な複合コンポーネント

ようなリストである再帰的なオブジェクトの豆の構造を、持っている - 私は1つを持つ再帰複合部品を作成しようとしていますマスターDTOの>リスト

- >値入力テキストと、値フィールドにバインドされた値を持つボタン。私はサブタイプを構築するために同じコンポーネントを呼び出すが、それは私にスタックオーバーフローエラーを与える。

私は、リストが空ではあるが動作しない場合に、包括的なパネルでレンダリングされた属性を試してみました。私はc:でコンポジットコンポーネント(複合コンポーネント内から)への呼び出しをラップしようとしましたが、動作しません。

私は常にStackOverflowErrorを取得します。

再帰的コンポジットコンポーネントをビルドする方法については、ヘルプが参考になります。御時間ありがとうございます!

ジョークはさておき、複合コンポーネントは、残念ながら再帰をサポートしていません)。

+1

コードを表示してください。 –

答えて

7

私はいつもあなたはきっと今現場に到着しましたその後にStackOverflowError

を取得します。私の仕事では、近似的に同様の要件を持つコンポーネントに取り組みました。私たちが解決した方法は、再帰構造を宣言するために複合コンポーネントに配置できるいくつかのJavaベースのコンポーネントで直接再帰を置き換えることでした。それは私の会社が著作権を保有だと私は実際のコードを与えることはできませんが、次はそれを使用することができる方法の一例である

<jcf:recursion value="#{foo.someData}" var="item"> 

    <jcf:recursionNode level="0"> 
     <jcf:recursionNodeItem rendered="#{foo.someCondition}"> 
      <!-- Some markup possibly referencing item --> 
       <jcf:insertRecursionNodeChildren /> 
      <!-- Some more markup --> 
     </jcf:recursionNodeItem> 
    </jcf:recursionNode> 

    <jcf:recursionNode> 
     <!-- Some markup --> 
     <jcf:recursionNodeItem rendered="#{foo.someOtherCondition}"> 
      <!-- Some more markup --> 
       <jcf:insertRecursionNodeChildren /> 
      <!-- Some more markup --> 
     </jcf:recursionNodeItem> 
     <!-- Some more markup --> 
    </jcf:recursionNode> 

</jcf:recursion> 

アイデアは、再帰の反復ごとにということで、明示的なマークアップと命令を定義することができます。この例には、第1レベルの指示が示されています。レベルが定義されていない場合は、明示レベルが定義されていない再帰のすべてのレベルに対する命令があります。 Nodesは新しいレベルを表し、NodeItemsは所定のレベルのすべてのアイテムを表します。

親Javaベースコンポーネントは、Javaコードで実際の再帰を開始し、レンダリングのためにその子に委譲します。

うまくいけば、これはあなたを得ることができます。