2011-02-13 15 views
5

Estoy escribiendo un componente de material compuesto, que tienen una etiqueta especial llamado:En JSF2, ¿cómo saber si el componente compuesto tiene hijos?

<composite:insertChildren /> 

que inserta todos los niños del componente allí. ¿Hay alguna forma de saber si el componente tiene hijos? Como un valor booleano que podría ir en un atributo "renderizado".

Respuesta

7

La expresión básica que está buscando es el siguiente:

#{cc.childCount} o más elaboradamente:

#{component.getCompositeComponentParent(component).childCount}

P. ej el siguiente componente compuesto:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:cc="http://java.sun.com/jsf/composite" 
> 
    <cc:interface/> 

    <cc:implementation>    
     <h:outputText value="Children: #{cc.childCount}" /> 
    </cc:implementation>  
</html> 

utilizado en la siguiente Facelet:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:test="http://java.sun.com/jsf/composite/test"  
> 

    <h:body> 

     <test:myCom> 
      <h:outputText value="first child" /> 
      <h:outputText value="second child" /> 
     </test:myCom> 

    </h:body> 
</html> 

imprimirá Children: 2.

Por lo tanto, #{cc.childCount != 0} le dirá si un componente compuesto tiene hijos o no.

+1

'cc.childCount' solo le da la respuesta correcta, si no utiliza' 'en la implementación compuesta. – squallsv

+0

Esto no responde la pregunta per se. Dado que quería el recuento de '' como lo señala @squallsv. Consulte las observaciones de wentwog, Brian Leatham o de mí sobre cómo obtener el conteo cuando se usa esta etiqueta. –

+0

@JohnYeary tienes razón. Gracias a todos por enviar estas respuestas. Aunque la pregunta es técnicamente un poco ambiciosa (op optaron por "los niños del componente"), es más lógico que los niños insertados por '' hayan sido designados. –

2

Al menos en Mojarra, esto no funciona. Los hijos de un componente compuesto se insertan bien, pero el acceso a #{cc.parent} o #{cc.children} no funciona en 2.0.2, y #{cc.childCount} siempre devuelve 0 en 2.0.4, independientemente de la cantidad de hijos.

+0

# {component.getCompositeComponentParent (component) .childCount} funcionó para mí. ¿Has probado eso? – arg20

6

Me encontré con el mismo problema y logré encontrar hijos de un componente compuesto dentro de su faceta 'javax.faces.component.COMPOSITE_FACET_NAME'.

En Java es como esto:

// we are within some method of UIComponent 
UIComponent childrenHolderFacet = getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME"); 
Iterator<UIComponent> childrenIt = childrenHolderFacet.getChildren().iterator(); 
... 

En JSF es algo como:

#{component.getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME").children} 

espero que ayude.

+1

¡Bonito hallazgo! Gross fix, pero bueno que lo encontraste;) Para mí la sintaxis que funcionó fue: '# {cc.getFacets(). Get ('javax.faces.component.COMPOSITE_FACET_NAME'). Children}' –

+0

Dado que estamos buscando para el conteo, sin embargo, tuve que modificarlo ligeramente agregando 'size()'. '# {cc.getFacets(). get ('javax.faces.component.COMPOSITE_FACET_NAME'). children.size()}' –

Cuestiones relacionadas