2011-10-10 14 views
11

¿Alguna razón por la que uno como Set<MyObject> objects = new HashSet<MyObject>(); no debería funcionar en la tabla de datos JSF? Funciona con List.Mostrar objetos de una colección Establecer en Datatable JSF no funciona

+2

Ciertamente porque los elementos de un HashSet no están ordenados. Cualquier inserción o eliminación en el conjunto puede hacer que cambie el orden de sus elementos. –

+0

@JBNizet Esto debería ser una respuesta. –

+0

No soy un experto en JSF, y por lo tanto no estoy seguro de que este sea el motivo (o la única razón). Así que dejaré que otros respondan una respuesta más precisa. –

Respuesta

23

En cuanto a por qué un Set en general no es compatible, esto se debe a que esta estructura de datos nunca está destinada a contener una colección de objetos que es ordenada por un índice. El List hace eso y esta estructura de datos es la estructura de datos más sensible para representar el valor de un componente UIData. La interfaz DataModel, que representa el valor empaquetado de los componentes UIData y contiene los índices de fila y recuerda la fila actual para iteración en procesamiento y entrega de formulario en posback, admite desde las clases de colección Java solo la interfaz List con sabor a ListDataModel.

Finalmente, después de un proceso de toma de largo (especialmente empujada por la comunidad Hibernate/JPA que por lo general utiliza Set para las relaciones nm), el equipo de especificación JSF tiene para el próximo JSF 2.2 decidido dejar que el apoyo DataModel interfaz de la interfaz Collection en lugar de solo el List, con la ayuda de la nueva implementación CollectionDataModel. Esto también admite conjuntos. Vea también JSF spec issue 479. Solo debe tener en cuenta utilizar LinkedHashSet en lugar de HashSet, sin duda si su intención es tener una tabla de datos editable. A LinkedHashSet mantiene el orden de los elementos.

Cuestiones relacionadas