2011-08-07 122 views
5

我有一個遞歸對象豆結構,這是主DTO像JSF遞歸複合組件

列表 - >值 - >主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> 

的想法是,遞歸的每一次迭代,可以定義明確的標記和說明。示例中顯示的是第一級的說明。如果未定義級別,則說明針對遞歸中的每個級別都沒有定義顯式級別。 Nodes代表新的水平,而NodeItems代表給定水平上的所有項目。

父Java基於組件然後啓動Java代碼中的實際遞歸併委託其子進行呈現。

希望這可以讓你去。