私はいつも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コードで実際の再帰を開始し、レンダリングのためにその子に委任します。
うまくいけば、これはあなたを動かすことができます。