2010-10-25 16 views
29

¿Admite la etiqueta <ui:repeat /> la iteración sobre java.util.Set? Intenté iterar sobre los objetos de entidad de mi dominio JPA contenidos en un conjunto, pero recibo errores. ¿Se me escapa algo? ¿Necesita una bandera adicional estar presente o algo así?JSF - <ui:repeat /> en un java.util.Set?

Respuesta

36

No, el ui:repeat no admitan el juego, ni tampoco h:dataTable.

Debería devolver una Lista del Conjunto y usarla en su lugar.

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

Debe evitar el uso de c:forEach; here is an article on why.

+0

Dado que los getters en JSF son usualmente llamados [varias veces] (https://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multiple-times) esto puede ser una solución costosa. –

1

Considere utilizar c:forEach en su lugar. Parece que ui:repeat no es compatible con conjuntos (es decir, requiere algún tipo de propiedad de pedido).

lo contrario, puede crear su propia etiqueta como se describe en: http://techblog.bozho.net/?p=28

+6

No ** NO ** considerar el uso de 'c: foreach': http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets –

+1

Depende completamente de qué es el conjunto que está iterando y si compila tiempo o no. Entonces, si ese es el caso, entonces PUEDE usar 'c: forEach'. – AdamH

+0

Sí, si sabes lo que estás haciendo, puedes usar 'c: forEach', pero leo tu publicación diciendo que 'deberías considerar el uso de c: forEach', y este no es el caso. Mejor usar 'ui: repeat' para evitar problemas –

69

La forma más fácil de finalizar el trato en la página sin modificar la clase es convertir el set en un array de esta manera.

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