2010-10-20 7 views
12

Una ventaja del modelo de datos es que obtiene el índice de la fila en una tabla. Pero me parece innecesario, ya que puede acceder al elemento de fila actual utilizando el atributo var de h: datatable. Y a menudo necesito convertir el modelo de datos a la lista, ya que algunas bibliotecas de componentes esperan una lista. Estoy pensando en abandonar completamente DataModel. ¿Qué piensas? ¿Hay alguna ventaja de DataModel?JSF 2.0: ¿Existe alguna ventaja al utilizar DataModel <T> sobre la lista <T> para aplicaciones CRUD

Gracias, Theo

Respuesta

9

Otra ventaja es que se puede obtener de la fila actualmente procesado por DataModel#getRowData(). Esto es particularmente útil cuando quiere acceder a la fila actual durante los eventos (conversión/validación, detector de cambio de valor, método de acción, etc.).

E.g.

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

con

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

puede encontrar un ejemplo básico CRUD que utiliza esto en this blog. Si no estaba usando DataModel, se le forzaría a usar f:setPropertyActionListener para esto, que es solo torpe y no funcionará para un validador/convertidor o detector de cambio de valor. Desde EL 2.2, también se puede pasar el elemento actual var como argumento de un método de este modo:

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

con

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

Mientras agradable, esto sólo haría que su aplicación web incompatible con contenedores basados ​​en Java EE 5.

En cuanto a los gastos generales, la "conversión" de List<T> a DataModel<T> es particularmente barata. No se han copiado ni creado nuevos elementos, es solo una clase contenedora que delega los métodos a la clase envolvente y le agrega otros métodos (ver también adapter pattern).

+2

¿Podemos concluir que el 'DataModel' existe solo para dos funciones: para proporcionar información de filas (no necesaria con EL 2.2) y para permitir oyentes (supongo que esto podría ser bueno a veces)? Una nota: el uso de EL 2.2 no hace que la aplicación sea incompatible con los contenedores JEE5 (puede actualizar manualmente sus bibliotecas EL), sin embargo, hace que la aplicación sea incompatible con la especificación JEE5. –

Cuestiones relacionadas