2010-10-25 11 views
29

Il tag <ui:repeat /> supporta il iterating su un java.util.Set? Ho provato a ripetere i miei oggetti di dominio JPA contenuti in un Set, ma a ricevere errori. C'è qualcosa che mi manca? È necessario che sia presente una bandiera aggiuntiva o qualcosa del genere?JSF - <ui:repeat /> su un java.util.Set?

risposta

36

No, il ui:repeat non supporta Set, né h:dataTable.

È necessario restituire un elenco dal set e utilizzarlo.

public List<T> getListFromSet(Set<T> set) { 
    return new ArrayList<T>(set); 
} 

È consigliabile evitare l'uso di c:forEach; here is an article on why.

+0

Dato che i getter in JSF vengono comunemente chiamati [più volte] (https://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multiple-times) questo può essere una soluzione costosa. –

1

Utilizzare invece c:forEach. Sembra che ui:repeat non supporti set (cioè richiede una sorta di proprietà di ordinamento).

Altrimenti è possibile creare il proprio tag, come descritto in: http://techblog.bozho.net/?p=28

+6

Do ** non ** considerano usando 'c: forEach': http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets –

+1

Dipende completamente quale è l'insieme che stai iterando e se compila il tempo o meno. Quindi, se questo è il caso, puoi usare 'c: forEach'. – AdamH

+0

Sì, se sai cosa stai facendo, puoi usare 'c: forEach', ma ho letto il tuo post in questo modo 'dovresti considerare l'uso di c: forEach', e questo non è il caso. Meglio usare 'ui: repeat' per evitare problemi –

69

Il modo più semplice per concludere l'offerta alla pagina senza modificare la classe è la conversione dello set in uno array come questo.

<ui:repeat value="#{myBean.mySet.toArray()}" var="_myvar"> 
Problemi correlati