2011-10-10 12 views
11

Qualsiasi motivo per cui un oggetto come Set<MyObject> objects = new HashSet<MyObject>(); non dovrebbe funzionare nel Datatable JSF? Funziona con List.La visualizzazione di oggetti da una raccolta Set in JSF Datatable non funziona

+2

Certamente perché gli elementi di HashSet non sono ordinati. Qualsiasi inserimento o rimozione nel set può causare la modifica dell'ordine dei suoi elementi. –

+0

@ JBNizet Questa dovrebbe essere una risposta. –

+0

Non sono un esperto di JSF e quindi non sono sicuro che questa sia la ragione (o l'unica ragione). Quindi lascerò che gli altri rispondano a una risposta più precisa. –

risposta

23

Per quanto riguarda il motivo per cui un Set in generale non è supportato, questo perché questa struttura dati non ha mai l'intenzione di contenere una raccolta di oggetti che è ordinata da un indice. Lo List fa questo e questa struttura dati è la struttura dati più ragionevole per rappresentare il valore di un componente UIData. L'interfaccia DataModel, che rappresenta il valore spostato dei componenti UIData e contiene gli indici delle righe e memorizza la riga corrente per l'iterazione sul rendering e l'elaborazione di invio del modulo sul postback, supporta dalle classi di raccolta Java solo l'interfaccia List nel formato ListDataModel.

Dopo un processo decisionale lungo (soprattutto spinto dalla comunità Hibernate/JPA che usa generalmente Set per i rapporti nm), il team JSF spec ha per l'imminente JSF 2.2 finalmente deciso di lasciare che il supporto DataModel interfaccia l'interfaccia Collection invece che da solo il List, con l'aiuto della nuova implementazione CollectionDataModel. Questo supporta anche i set. Vedi anche JSF spec issue 479. Dovresti solo ricordare di usare LinkedHashSet invece di HashSet, certamente se la tua intenzione è di avere una tabella di dati modificabile. A LinkedHashSet mantiene l'ordine degli elementi.

Problemi correlati