2013-03-31 21 views
7

Utilizzando JSF 2.0, ho bisogno di visualizzare una tabella in cui ogni riga contiene un collegamento che apre un popup. Ho due modelli: A con proprietà id e List<B> e B con proprietà id e name. Nel mio backing bean, ho una proprietà List<A>. A mio avviso, sto usando <ui:repeat> per iterare su List<A>.Come utilizzare <ui:repeat> per iterare su un elenco annidato?

Il requisito è, a seconda della riga che l'utente fa clic, il corrispondente List<B> di A deve essere visualizzato. Tuttavia, lo <ui:repeat> non accetta un elenco nidificato da assegnare nell'attributo var. Quindi, ho bisogno di fare un sacco di soluzioni alternative che non è efficiente.

Come posso risolvere questo problema in modo efficiente?

+0

Mostraci cosa hai provato! – skuntsel

risposta

13

Quello che vi serve è quello di nido un'altra <ui:repeat> tag nel iterazione esterna:

<ui:repeat value="#{bean.listOfA}" var="a"> 
    ... 
    <ui:repeat value="#{a.listOfB}" var="b"> 
     ... 
    </ui:repeat> 
</ui:repeat> 

L'unica cosa che resta cioè degno di nota è che nidificati <ui:repeat> tag utilizzati ad avere problemi con la gestione dello stato fino Mojarra 2.1.15 versione (dettagli in jsf listener not called inside nested ui:repeat e in molte domande non così recenti e le loro risposte), che potrebbe comportare che i listener di azioni non vengano richiamati, ecc., ma se si sta attualmente utilizzando l'implementazione Mojarra JSF più recente, è sufficiente saltare completamente questa parte.