Ordenación Múltiple en Tablas PrimeFaces cargadas mediante LazyDataModel

Si utilizas FundeWebLazyDataModel ya no es necesario revisar esta Wiki. La funcionalidad ya esta incluida.

Vamos a ver como tener ordenación múltiple en tablas PrimeFaces que cargan los datos mediante un objeto LazyDataModel. Lo primero es leer la guía tecnica Creación del Bean de Respaldo del Maestro y clases necesarias.

Una vez que tenemos el lazy creado, el método de la clase LazyDataModel al que llama PrimeFaces para cargar los datos con ordenación multiple es:

/**
 * Custom lazy loading DataModel to deal with huge datasets
 */
public abstract class LazyDataModel<T> extends DataModel<T> implements SelectableDataModel<T>, Serializable {
 
    ...
 
    public List<T> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String,Object> filters) {
        throw new UnsupportedOperationException("Lazy loading is not implemented.");
    }
 
    ...
}


Este método lo tenemos que sobreescribir en nuestra clase lazy. En este caso, seguimos el ejemplo de la guía anterior:

package ...;
 
...
 
import es.um.atica.faces.utils.PrimeFacesUtils;
 
...
 
public class LazyAnuncioDataModel extends LazyDataModel<Anuncio> {
 
    ...
 
    @Override
    public List<T> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String,Object> filters) {
        ResultQuery<Anuncio> resultQuery = getServicioAnuncios().obtenerListadoAnuncios(parametros, first, pageSize, PrimeFacesUtils.sortMetaToString(multiSortMeta)); 
        anuncios = resultQuery.getResultList();
        setRowCount((int) resultQuery.getResultCount());
        return anuncios;
    }
 
    ...
 
}


El método estático sortMetaToString de la clase PrimeFacesUtils, transforma una lista de objetos SortMeta en un String. Ahora tenemos que crear la llamada en el servicio y el DAS, para en lugar de utilizarel metodo que utiliza los parámetros sortField y sortOrder, utilizar la versión del método, que utiliza el parámetro order.

Referencias


JUAN MIGUEL BERNAL GONZALEZ 20/11/2018 08:50