Paginação Ajax JSF 2 usando Primefaces (RESOLVIDO)

3 respostas
A

Como fazer uma paginação Ajax, consultando o banco de dados, utilizando o primefaces e o componente p:dataTable.
No showcase do primefaces tem um exemplo muito simples usando a paginação, lá simplesmente ele retorna uma lista randômica. Só que na prática é diferente quando precisamos de acesso ao banco de dados. Para fazer a paginação precisa saber a página atual, a quantidade de registros, o campo de ordenação, o sentido da ordenação (asc ou desc) para assim na minha query já retornar paginado. Apenas exibir uma lista com muitos dados pode ser pesado na aplicação. Alguém pode ajudar?

3 Respostas

D
Faça com lazy=true. Segue um exemplo:
<p:dataTable id="transacaoDataTable" var="transacao" value="#{extratoController.lazyTransacaoDataModel}" paginator="true" rows="10" lazy="true" dynamic="true"
                                 paginatorTemplate="{PageLinks}" >

E na classe ExtratoController:

private LazyDataModel<Transacao> lazyTransacaoDataModel;
E no get você coloca o método de buscar no banco de dados. Repare nos parâmetros first e pageSize do método load. Esses parâmetros são usados para fazer a paginação lazy.
public LazyDataModel<Transacao> getLazyTransacaoDataModel() {
        if (lazyTransacaoDataModel == null) {
            lazyTransacaoDataModel = new LazyDataModel<Transacao>() {

                @Override
                public List<Transacao> load(int first, int pageSize, String string, boolean bln, Map<String, String> map) {
                    List<Transacao> pesquisaTransacao = transacaoService.buscaParaExtrato(funcionarioAux, getDataInicioAux(), getDataFimAux(),
                            pageSize, first);
                    return pesquisaTransacao;
                }
            };
            lazyTransacaoDataModel.setPageSize(10);
        }
        return lazyTransacaoDataModel;
    }
A

Obrigado pela ajuda. Era exatamente isso que eu precisava.

C

Desculpe por re-abrir o post antigo, mas estou com dúvidas.

Caso eu queira colocar filtros fora do datatable, por exemplo, quero colocar um filtro por periodo de:dataInicial até:dataFinal, como executo a consulta ja que os filtros do load são apenas dos compos filters do datatable.

Obrigado

Criado 17 de janeiro de 2011
Ultima resposta 24 de out. de 2011
Respostas 3
Participantes 3