2010-10-20 10 views
12

Un vantaggio del modello dati è che si ottiene l'indice di riga in una tabella. Ma trovo questo non necessario, dal momento che è possibile accedere all'attuale elemento di riga usando l'attributo var di h: datatable. E spesso ho bisogno di convertire il datamodel in lista, dal momento che alcune librerie di componenti si aspettano una lista. Sto pensando di abbandonare completamente DataModel. Cosa ne pensi? Ci sono dei vantaggi di DataModel.JSF 2.0: C'è qualche vantaggio nell'uso di DataModel <T> su Elenco <T> per le applicazioni CRUD

Grazie, Theo

risposta

9

Un altro vantaggio è che è possibile ottenere la riga correntemente elaborato da DataModel#getRowData(). Ciò è particolarmente utile quando si desidera accedere alla riga corrente durante gli eventi (conversione/convalida, listener di modifica del valore, metodo di azione, ecc.).

E.g.

<h:column> 
    <h:commandButton value="edit" action="#{bean.edit}" /> 
</h:column> 

con

public String edit() { 
    Item item = dataModel.getRowData(); 
    // ... 
} 

Si può trovare un esempio CRUD che utilizza questo this blog. Se non stava usando DataModel, si sarebbe costretti ad usare f:setPropertyActionListener per questo che è goffo e non funzionerà per un validatore/convertitore o modifica del valore ascoltatore. Dal EL 2.2, si potrebbe anche passare il var elemento corrente come metodo di discussione in questo modo:

<h:commandButton value="edit" action="#{bean.edit(item)}" /> 

con

public String edit(Item item) { 
    // ... 
} 

Mentre bello, questo sarebbe solo rendere il vostro webapp incompatibile con Java EE 5 contenitori basati.

Per quanto riguarda l'overhead, la "conversione" da List<T> a DataModel<T> è particolarmente economica. Nessun nuovo elemento è stato copiato o creato o così, è solo una classe wrapper che delega i metodi alla classe spostata e aggiunge altri metodi (vedi anche lo adapter pattern).

+2

Possiamo concludere che il 'DataModel' esiste solo per due funzioni: per fornire informazioni di riga (non necessarie con EL 2.2) e per consentire gli ascoltatori (suppongo che potrebbe essere carino qualche volta)? Una nota: l'uso di EL 2.2 non rende l'applicazione incompatibile con i contenitori JEE5 (è possibile aggiornare manualmente le loro librerie EL), tuttavia rende l'applicazione incompatibile con le specifiche JEE5. –

Problemi correlati