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.