2011-08-07 16 views
5

tengo una estructura de grano de objeto recursivo, que es comoJSF recursiva Componente Compuesto

lista de Maestro DTO -> valor -> lista de Maestro DTO

Estoy tratando de crear un componente compuesto recursiva con una texto de entrada y un botón con valor enlazado al campo de valor. Estoy llamando al mismo componente para crear subtipos, pero me da error de desbordamiento de pila.

He intentado con el atributo renderizado en el panel que abarca en función de si la lista está vacía pero no funciona. Intenté ajustar la llamada al componente compuesto (desde el componente compuesto) en c: si pero no funciona.

Siempre obtengo un StackOverflowError.

Cualquier ayuda sobre cómo construir componentes recursivos compuestos sería de ayuda. ¡Gracias por tu tiempo!

+1

Muestra un código. –

Respuesta

7

siempre consigo un StackOverflowError

entonces seguramente has llegado al sitio en ese momento;)

Bromas aparte, componentes compuestos por desgracia no son compatibles con la recursividad. En mi trabajo, recientemente trabajamos en un componente que tenía requisitos similares, y la forma en que lo resolvimos fue reemplazar la recursión directa con varios componentes basados ​​en Java que se pueden colocar en un componente compuesto para declarar la estructura recursiva.

no puedo dar el código real ya que es propiedad de mi compañía, pero el siguiente es un ejemplo de cómo se podría utilizar:

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

La idea es que para cada iteración de la recursividad, uno puede definir marcas e instrucciones explícitas. En el ejemplo, se muestran las instrucciones para el primer nivel. Si no se define ningún nivel, las instrucciones son para cada nivel en la recursión que no tiene un nivel explícito definido. Nodes denotan nuevos niveles, mientras que NodeItems representan todos los elementos en un nivel determinado.

El componente principal basado en Java inicia entonces la recursión real en código Java y delega en sus elementos secundarios para la representación.

Espero que esto te ayude a avanzar.

Cuestiones relacionadas