Paginação com Primefaces

5 respostas
C

Olá pessoal, estou tentando fazer a pagina na minha dataTable com a propriedde lazy do primefaces, mas o problema é que os registros nao aparecem na table. O que fazer?

Table:
<p:dataTable id="dtCarreta" value="#{carretaMBean.lazyTransacaoDataModel}" var="item" selectionMode="true"  
              selection="#{carretaMBean.selectedCarretas}" emptyMessage="#{msgs.dtVazia}"  
              paginator="true" lazy="true" rows="3">  
    <!-- Exportar dados da Tabela -->  
    <f:facet name="header">  
         <h:commandLink id="clkXls">  
             <p:graphicImage value="imagens/excel.png" />  
             <p:dataExporter type="xls" target="dtCarreta" fileName="#{msgs.dtEpt}"  
                             excludeColumns="6" postProcessor="#{carretaRelMBean.postProcessoXLS}"/>  
         </h:commandLink>  
         <p:tooltip for="clkXls" value="#{msgs.tpClkXls}" showEffect="grow" position="topRight"  
                    hideEffect="grow" showEffectLength="100" hideEffectLength="500" />  
      
         <p:spacer height="10px" />  
      
         <h:commandLink id="clkPdf">  
             <p:graphicImage value="imagens/pdf.png" />  
             <p:dataExporter type="pdf" target="dtCarreta" fileName="#{msgs.dtEpt}" excludeColumns="6"/>  
         </h:commandLink>  
         <p:tooltip for="clkPdf" value="#{msgs.tpClkPdf}" showEffect="grow" position="topRight"  
                    hideEffect="grow" showEffectLength="100" hideEffectLength="500" />  
    </f:facet>  
    <p:column id="clnCodCarreta" sortBy="#{item.codigocarreta}" filterBy="#{item.codigocarreta}">  
         <f:facet name="header">  
             <h:outputText id="optCodigoCarreta" value="#{msgs.optTableCodigoCarreta}" />  
         </f:facet>  
         <h:outputText value="#{item.codigocarreta}"/>  
    </p:column>  
    <p:column id="clnDescricaoCarreta" sortBy="#{item.descricao}" filterBy="#{item.descricao}">  
         <f:facet name="header">  
             <h:outputText id="optDescricaoCarreta" value="#{msgs.optTableDescricaoCarreta}" />  
         </f:facet>  
         <p:commandLink id="clkDescricao" value="#{item.descricao}" update="frmCadastrarCarreta:pnlCadastro"  
                        styleClass="clkEditar">  
             <f:setPropertyActionListener value="#{item}" target="#{carretaMBean.selectedCarreta}" />  
         </p:commandLink>  
         <p:tooltip for="clkDescricao" value="#{msgs.tpEditar}" showEffect="grow" position="topRight"  
                    hideEffect="grow" showEffectLength="100" hideEffectLength="500" />  
    </p:column>  
    <p:column id="clnPlaca" sortBy="#{item.placa}" filterBy="#{item.placa}">  
         <f:facet name="header">  
             <h:outputText value="#{msgs.optTablePlacaCarreta}" />  
         </f:facet>  
         <h:outputText value="#{item.placa}"/>  
    </p:column>  
    <p:column id="clnAno" sortBy="#{item.ano}" filterBy="#{item.ano}">  
         <f:facet name="header">  
             <h:outputText value="#{msgs.optTableAnoCarreta}" />  
         </f:facet>  
         <h:outputText value="#{item.ano}"/>  
    </p:column>  
    <p:column id="clnCor" sortBy="#{item.cor}" filterBy="#{item.cor}">  
         <f:facet name="header">  
             <h:outputText value="#{msgs.optTableCorCarreta}" />  
         </f:facet>  
         <h:outputText value="#{item.cor}"/>  
    </p:column>  
    <p:column id="clnCarroceira" sortBy="#{item.carroceria.descricao}" filterBy="#{item.carroceria.descricao}">  
         <f:facet name="header">  
             <h:outputText value="#{msgs.optTableCarroceriaCarreta}" />  
         </f:facet>  
         <h:outputText value="#{item.carroceria.descricao}"/>  
    </p:column>  
    </p:dataTable>
Managed Bean:
private LazyDataModel<Carreta> lazyTransacaoDataModel;
public LazyDataModel<Carreta> getLazyTransacaoDataModel() {  
            if (lazyTransacaoDataModel == null) {  
                lazyTransacaoDataModel = new LazyDataModel<Carreta>() {  
      
                    @Override  
                    public List<Carreta> load(int first, int pageSize, String string, boolean bln, Map<String, String> map) {  
                        List<Carreta> pesquisaCarreta = carretaDAO.getCarreta();  
                        return pesquisaCarreta;  
                    }  
                };  
                lazyTransacaoDataModel.setPageSize(10);  
            }  
            return lazyTransacaoDataModel;  
        }  
      
        public void setLazyTransacaoDataModel(LazyDataModel<Carreta> lazyTransacaoDataModel) {  
            this.lazyTransacaoDataModel = lazyTransacaoDataModel;  
        }
DAO:
public List<Carreta> getCarreta() {  
    List<Carreta> list = getPureList("from Carreta carreta");  
    return list;

5 Respostas

A

Utiliza um List ao invés de LazyDataModel

C

Meu caro, não posso usar o List ao invés de LazyDataModel porque quando vou usar o lazyTransacaoDataModel da erro nessa linha: lazyTransacaoDataModel.setPageSize(10);, porque é um componente do Primefaces.
Vc já fez paginação por demanda com Primefaces? Se fez, poderia me enviar o código? Se não quiiser postar aqui me envia por email: [email removido]

Abraço.

J

clever:
Meu caro, não posso usar o List ao invés de LazyDataModel porque quando vou usar o lazyTransacaoDataModel da erro nessa linha: lazyTransacaoDataModel.setPageSize(10);, porque é um componente do Primefaces.
Vc já fez paginação por demanda com Primefaces? Se fez, poderia me enviar o código? Se não quiiser postar aqui me envia por email: [email removido]

Abraço.

cara tinha um problema com este Lazy do prime tbm no meu caso ele não paginava mais quando coloquei um setRowCount(1); no meu código deu certo tenta aewhh.

Ace

Se vc tiver um Dao generico crie 2 metodos.

Um para a listagem.

public List<T> listaTodosPaginada(int firstResult, int maxResults) {
		EntityManager em = new JPAUtil().getEntityManager();
		CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
		query.select(query.from(classe));

		List<T> lista = em.createQuery(query).setFirstResult(firstResult)
				.setMaxResults(maxResults).getResultList();

		em.close();
		return lista;
	}

Outro para contar o conteudo do Bd.

public int contaTodos() {
		EntityManager em = new JPAUtil().getEntityManager();
		long result = (Long) em.createQuery("select count(n) from nomeTabela n").getSingleResult();
		em.close();
		
		return (int) result;
	}

No seu DataModel. Não esqueça de extender a classe com LazyDataModel

public List<NotaFiscal> load(int inicio, int quantidade, String campoOrdenacao, boolean sentidoOrdenacao,
			Map<String, String> filtros) {
		
		DAO<NotaFiscal> dao = new DAO<NotaFiscal>(NotaFiscal.class);		
		
		return dao.listaTodosPaginada(inicio, quantidade);
	}

no seu MB

public nomeDoMetodo(){
		this.dataModel = new DataModelNotasFiscais();
		
		DAO<nomeBean> dao = new DAO<nomeBean>(nomeBean.class);
		this.dataModel.setRowCount(dao.contaTodos()); //chama o metodo de contagem da qtidade do banco
		this.dataModel.setPageSize(5);//seleciona a quantidade de paginação
	}

roda la e testa…

Ace

Esqueci…

lá no seu data table.
acrescente tbm

<p:dataTable dynamic "true"></p:dataTable>
Criado 2 de agosto de 2011
Ultima resposta 12 de ago. de 2011
Respostas 5
Participantes 4