6

私は再帰的なオブジェクト Bean 構造を持っています。

マスター DTO のリスト -> 値 -> マスター DTO のリスト

1 つの入力テキストと、値フィールドにバインドされた値を持つボタンを使用して、再帰的な複合コンポーネントを作成しようとしています。サブタイプを構築するために同じコンポーネントを呼び出していますが、スタック オーバーフロー エラーが発生します。

リストが空の場合に基づいて、包含パネルでレンダリングされた属性を試しましたが、機能しません。(複合コンポーネント内から) 複合コンポーネントへの呼び出しを c:if でラップしようとしましたが、機能しません。

私はいつも StackOverflowError を受け取ります。

再帰的な複合コンポーネントを構築する方法についてのヘルプは役に立ちます。御時間ありがとうございます!

4

1 に答える 1

8

私はいつも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コードで実際の再帰を開始し、レンダリングのためにその子に委任します。

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

于 2011-08-07T12:09:43.803 に答える