Ordenar p:dataTable com PrimeFaces

1 resposta
C

Olá pessoal, estou com o seguinte problema: Tenho uma p:dataTable com paginação por demanda. o problema é que meus sortBy e filterBy nao funcionam. Acho que é por causa da paginação. Alguém tem alguma ideia de como resolver isso?

XHTML
<p:dataTable id="dtCarreta" value="#{carretaMBean.carretas}" lazy="true" var="item" paginator="true" rows="5"
                             emptyMessage="#{msgs.dtVazia}" rowsPerPageTemplate="5,10,15" selection="#{carretaMBean.selectedCarretas}"
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink}
                             {LastPageLink} {RowsPerPageDropdown}" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}"
                             rowIndexVar="rowIx">
<p:column selectionMode="multiple" />
                    <p:column id="clnCodCarreta" sortBy="#{item.codigocarreta}"
                              filterBy="#{item.codigocarreta}" style="width: 50px" >
                        <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>
                        <h:outputText value="#{item.descricao}"/>
                    </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:dataTable>
BEAN
public LazyDataModel<Carreta> getCarretas() {
        if (cachedCarreta == null) {
            cachedCarreta = new LazyDataModel<Carreta>() {

                @Override
                public List<Carreta> load(int first, int pageSize,
                        String sortBy, boolean bln, Map<String, String> map) {
                    List<Carreta> pesquisaCarreta = carretaDAO.getListaPaginado(first, pageSize, sortBy);
                    return pesquisaCarreta;
                }
            };
            int totalRowCount = carretaDAO.count();
            cachedCarreta.setPageSize(3);
            cachedCarreta.setRowIndex(1);
            cachedCarreta.setRowCount(totalRowCount);
        }
        return cachedCarreta;
    }
DAO
public int count() {
        Long resultado = new Long(0L);
        Query query = getSession().createQuery("select count(e) from Carreta e" );
        resultado = (Long) query.uniqueResult();
        return resultado.intValue();
    }
public List<Carreta> getListaPaginado(int inicio, int quantidade, String sortBy) {
        Session ses = getSession();
        Query query = ses.createQuery("SELECT e FROM Carreta e").setFirstResult(inicio).setMaxResults(quantidade);
        
        List<Carreta> lista = (List<Carreta>) query.list();
        ses.close();
        return lista;
    }

Por favor, se alguém souber me ajude....

1 Resposta

C

Testa no método getListaPaginado se a list é nula e somente alimenta novamente se ela for nula.

Criado 6 de setembro de 2011
Ultima resposta 30 de jun. de 2012
Respostas 1
Participantes 2