1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Primefaces datatable Lazyload - Paginação não funciona

Boa tarde pessoal,

Estou seguindo o showcase do dataTable - lazyload (Primefaces). Consigo carregar a página inicial, porém quando clico na próxima página, nada acontece. O método load não é chamado novamente! Alguma dica?

RESOLVIDO: Meu modo de inicializar o LazyModel estava errado no BackBean

ERRADO, inicializando no get:

    public LazyDataModel<Produto> getLazyModel() {
        return new LazyProdutoDataModel(this.produtoController);
    }

CORRETO, inicializando do @PosConstruct

        @PostConstruct
    public void posConstruct() {
        try {
            this.lazyModel = new LazyProdutoDataModel(this.produtoController);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

xhtml:

                <h:form>
                    <p:dataTable var="produto" value="#{produtoBean.lazyModel}"
                        rows="10" paginator="true" lazy="true" emptyMessage="Nenhum registro encontrado." paginatorPosition="bottom"
                        paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"  
                        currentPageReportTemplate="({startRecord} - {endRecord} de {totalRecords})"
                        rowsPerPageTemplate="5,10,15">

                          <p:column headerText="Cod.">  
                            <h:outputText value="#{produto.idProduto}" />  
                        </p:column>

                        <p:column headerText="Descrição">  
                            <h:outputText value="#{produto.dsProduto}" />  
                        </p:column>

                    </p:dataTable>  
                </h:form>

LazyModel:

public class LazyProdutoDataModel extends LazyDataModel<Produto> {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private ProdutoManagerBeanLocal produtoController;

    public LazyProdutoDataModel(ProdutoManagerBeanLocal produtoController) {
        this.produtoController = produtoController;
    }

    @Override
    public List<Produto> load(int first, int pageSize, String sortField,
            SortOrder sortOrder, Map<String, String> filters) {
        setRowCount(this.count(sortField, sortOrder, filters));
        setPageSize(pageSize);
        return this.produtoController.findByFiltros(first, pageSize, sortField,
                sortOrder, filters);
    }

    public int count(String sortField, SortOrder sortOrder,
            Map<String, String> filters) {
        setRowCount(10);
        return this.produtoController.count(sortField, sortOrder, filters);
    }

    @Override
    public void setRowIndex(final int rowIndex) {
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else {
            super.setRowIndex(rowIndex % getPageSize());
        }
    }

}

Obrigado pela ajuda!

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jsf lazy primefaces ou faça a sua própria pergunta.