2011-08-07 30 views
5

Tôi có một cấu trúc đậu đối tượng đệ quy, mà là giống nhưJSF Recursive composite Component

danh sách các Thạc sĩ DTO -> giá trị -> danh sách các Thạc sĩ DTO

tôi đang cố gắng để tạo ra một thành phần tổng hợp đệ quy với một văn bản đầu vào và nút có giá trị được liên kết với trường giá trị. Tôi đang gọi cùng một thành phần để xây dựng các loại phụ nhưng nó mang lại cho tôi lỗi tràn ngăn xếp.

Tôi đã thử với thuộc tính được hiển thị trong bảng bao gồm dựa trên danh sách nếu trống nhưng không hoạt động. Tôi đã cố gắng để bọc các cuộc gọi đến thành phần tổng hợp (từ bên trong thành phần composite) trong c: nếu nhưng nó không hoạt động.

Tôi luôn nhận được StackOverflowError.

Bất kỳ trợ giúp nào về cách xây dựng các thành phần tổng hợp đệ quy sẽ hữu ích. Cảm ơn vì đã dành thời gian cho tôi!

+1

Hiển thị một số mã. –

Trả lời

7

tôi luôn có được một StackOverflowError

Sau đó, bạn đã chắc chắn đến địa điểm ngay bây giờ;)

Truyện cười sang một bên, các thành phần phức tiếc là không hỗ trợ đệ quy. Tại công việc của tôi, gần đây chúng tôi đã làm việc trên một thành phần có các yêu cầu tương tự và cách chúng tôi giải quyết nó là thay thế đệ quy trực tiếp bằng một số thành phần dựa trên Java có thể được đặt trên một thành phần phức hợp để khai báo cấu trúc đệ quy.

tôi không thể cung cấp cho các mã thực tế là nó có bản quyền bởi công ty của tôi, nhưng sau đây là một ví dụ về làm thế nào nó có thể được sử dụng:

<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> 

Ý tưởng là cho mỗi lần lặp của đệ quy, người ta có thể xác định rõ ràng đánh dấu và hướng dẫn. Hiển thị trong ví dụ là hướng dẫn cho cấp độ đầu tiên. Nếu không có mức nào được xác định, các hướng dẫn dành cho mọi cấp độ trong đệ quy mà chưa được xác định rõ ràng. Nodes biểu thị các cấp độ mới, trong khi NodeItems thể hiện tất cả các mục ở một cấp độ nhất định.

Thành phần dựa trên Java mẹ sau đó bắt đầu đệ quy thực tế trong mã Java và các đại biểu cho con của nó để hiển thị.

Hy vọng điều này có thể giúp bạn tiếp tục.