...
Se deben proporcionar métodos de carga lazy (load y count) en el bean de respaldo para manejar la carga de datos según las necesidades de la tabla.
| Info |
|---|
| Fundeweb FundeWeb ya proporciona una librería con parte de esta funcionalidad implementada (FundeWebLazyDataModel) |
...
Se debe configurar el atributo lazy a true y valor debe ser un modelo de datos lazy ‘LazyDataModel’ (que se gestiona en su servicio correspondiente). Activamos la paginación y establecemos las filas iniciales para utilizarlo en la carga del modelo.
| Bloque de código | ||
|---|---|---|
| ||
<p:datatable value=#{manejador.lazyModel} lazy="true" paginator="true" rows="10"/> |
Implementación
1º Realizaremos una consulta a la entidad de la base de datos con todos los registros a obtener (sin filtros = sin where).
...
| Bloque de código | ||
|---|---|---|
| ||
public ResultQuery<Entity> obtenerEntities( Map<String, Object> filters, int first, int pageSize, String multiSortMeta ) {
List<String> restricciones = new ArrayList<>();
if (filters != null) {
restricciones = filters.keySet().stream().filter( filtro -> filters.get( filtro ) != null ).map( <<<<<<condiciones a filtrar>>>>>> ).collect( Collectors.toList() );
}
return this.resultsByEntityNamedQueryWithDinamicFilter( "obtenerEntities", restricciones, null, first, pageSize, multiSortMeta, null, null );
} |
| Info |
|---|
Vease también Consultas con Filtros Dinámicos con diferentes Operadores Lógicos. |
3º Creamos o añadimos a un servicio para manejar la lógica y actuar como intermediario entre el DAS y la capa de presentación con su @Name correspondiente y @Stateles. (@Name( EntityService.ID )@Stateless)
Y se añade el método implementado en el DAS
| Bloque de código | ||
|---|---|---|
| ||
public ResultQuery<Entity> obtenerEntity( Map<String, Object> filters, int first, int pageSize, String multiSortMeta ) {
return entityDAS.obtenerEntity( filters, first, pageSize, multiSortMeta );
} |
...
| Bloque de código | ||
|---|---|---|
| ||
protected List<Entity> loadPage( int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, Object> filters ) {
ResultQuery<Entity> resultQuery = getEntityService().obtenerEntity( filters, first, pageSize, null );
setRowCount( resultQuery.getResultCount().intValue() );
return resultQuery.getResultList();
} |
5º Configuramos el bean de respaldo e inicializamos el modelo de datos lazy. (Aquí el servicio si se puede inyectar a través del @name)
| Bloque de código | ||
|---|---|---|
| ||
private LazyDataModel<Entity> lazyModel;
@In( value = EntityService.ID, create = true )
private EntityService entityService;
lazyModel = new LazyDataModel( entityService); |
...
