2011-02-13 7 views
5

Sto scrivendo un componente composito, è necessario un tag speciale chiamato:In JSF2, come sapere se il componente composito ha figli?

<composite:insertChildren /> 

che inserisce tutti i bambini del componente lì. C'è un modo per sapere se il componente ha figli? Come un valore booleano che potrebbe andare su un attributo "renderizzato".

risposta

7

L'espressione fondamentale che cercate è la seguente:

#{cc.childCount} o più elaborato:

#{component.getCompositeComponentParent(component).childCount}

Ad es il seguente componente composito:

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

utilizzato sui seguenti 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> 

stamperà Children: 2.

Così #{cc.childCount != 0} dirà se un componente composito ha figli o no.

+1

'cc.childCount 'fornisce solo la risposta corretta, se non si utilizza' 'nell'implementazione composita. – squallsv

+0

Questo non risponde alla domanda di per sé. Dal momento che voleva il conteggio di '' come notato da @squallsv Si prega di vedere le osservazioni di wentwog, Brian Leatham o me su come ottenere il conteggio quando questo tag viene usato. –

+0

@JohnYeary hai ragione. Grazie a tutti voi per aver inviato quelle risposte. Sebbene la domanda sia tecnicamente un po 'ambiziosa (op ha chiesto "i figli del componente") è in effetti più logico che i bambini inseriti da "" fossero pensati. –

2

Almeno su Mojarra questo non funziona. I figli di un componente composito vengono inseriti correttamente ma l'accesso a #{cc.parent} o #{cc.children} non funziona su 2.0.2 e #{cc.childCount} restituisce sempre 0 su 2.0.4, indipendentemente dal numero di figli.

+0

# {component.getCompositeComponentParent (componente) .childCount} ha funzionato per me. Hai provato? – arg20

6

Ho riscontrato lo stesso problema e sono riuscito a trovare figli di un componente composito all'interno del suo facet 'javax.faces.component.COMPOSITE_FACET_NAME'.

In Java E 'in questo modo:

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

In JSF è qualcosa di simile:

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

Speranza che aiuta.

+1

Bella scoperta! Correzione lorda, ma bello che tu l'abbia trovata;) Per me la sintassi che ha funzionato era: '# {cc.getFacets(). Get ('javax.faces.component.COMPOSITE_FACET_NAME'). Children}' –

+0

Dato che stiamo cercando per il conteggio però, ho dovuto modificarlo appena leggermente aggiungendo 'size()'. '# {cc.getFacets(). get ('javax.faces.component.COMPOSITE_FACET_NAME'). children.size()}' –