Ordenação na Datatable

8 respostas
R

Ola galera, tudo certo? Bem, eu possuo algumas dataTables na minha aplicação. Em algumas delas, por exemplo, tenho várias colunas e queria ordená-las por algo em específico (por exemplo: ordem alfabética ao invés do código) . Bem, abaixo uma das dataTables.

<p:dataTable id="tabela1"
                                         rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}"
                                         rowIndexVar="rowIx"
                                         value="#{classificacaoJsfBean.classificacaoList}"
                                         var="item"
                                         emptyMessage="Nenhum registro encontrado."
                                         paginator="true"
                                         rows="15"
                                         pageLinks="10"
                                         paginatorPosition="bottom"
                                         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
                                         {NextPageLink} {LastPageLink}
                                         Exibir: {RowsPerPageDropdown}
                                         Encontrados: #{classificacaoJsfBean.classificacaoList.rowCount}"
                                         rowsPerPageTemplate="15,25,35,50"
                                         lazy="true">

                                <p:column headerText="Código" width="20">
                                    #{item.clasCodigo}
                                </p:column>

                                <p:column headerText="Classificação" sortBy="#{item.clasClass}">
                                    #{item.clasClass}
                                </p:column>

                                <p:column headerText="Descrição" sortBy="#{item.clasDescricao}">
                                    #{item.clasDescricao}
                                </p:column>
                        
                            </p:dataTable>

Nela,está sendo ordenada pelo código… Queria ordená-la pela descrição… Sei que tem tópicos sobre isso, pesquisei, mas não entendi muito bem onde devo mexer… Se laguém puder ajudar… Agradeço…

8 Respostas

F

Você quer ordenar pelo código e pela descrição? Se for, tente usar isso: http://www.primefaces.org/showcase/ui/datatableSortingMultiple.jsf

R

Ok, vou testar. E se, por exemplo eu quizesse ordenar SOMENTE PELA DESCRIÇÃO fernando? Vlw Abc

R

No meu banco, eu tenho um generator pelo código, será que isso não está impedindo algo?? Pois estou tentando ordenar pela Descrição e não estou conseguindo…

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BIBCLASSIFICACAO")
    @SequenceGenerator(name = "GEN_BIBCLASSIFICACAO", sequenceName = "GEN_BIBCLASSIFICACAO", allocationSize = 1, initialValue = 1)
R

Mais alguém poderia ajudar???Agradeço mtooo

A

E ai Blz.
Porque vc não faz a ordenação dentro de sua classe DAO?, é mas simples.

posta ela ai.

R

aprendizweb:
E ai Blz.
Porque vc não faz a ordenação dentro de sua classe DAO?, é mas simples.

posta ela ai.

Olá… Bem, infelizmente não trabalho com classe DAO… Saberia de outra forma?? Abc

A

Então posta seu método que exibi a lista na tabela.

R

Meu bean:

public static final String RELATORIO_TIPOMATERIAL = "tipomaterial";
    private static Logger log = LoggerFactory.getLogger(TipoMaterialJsfBean.class);
    @EJB
    private TipoMaterialService m;
    @EJB
    private CrudService crudService;
    private LazyDataModel<TipoMaterial> tipoMaterialList;
    private String tipoCodigo;
    private String tipoDescricao;

    public boolean verificaListaTipoMaterial() {
        List<TipoMaterial> materials = crudService.findAll(TipoMaterial.class, "tipoDescricao");
        if (materials.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }
    public void geraRelatorioTipoMaterialPDF() {
        geraRelatorioTipoMaterial(true);
    }

    public void geraRelatorioTipoMaterial(boolean isPDF) {
        List<TipoMaterial> listaRelatorio = m.listaTipoMaterialRelatorio(montaParametros());
        if (isPDF) {
            geraRelatorioPDF(listaRelatorio, RELATORIO_TIPOMATERIAL);
        }
    }

    public TipoMaterialJsfBean() {
    }

    @Override
    public void atualizar() {
    
        renovarTabela();
        ativaAbaListagem();
    }

    @Override
    public void renovarTabela() {
        log.trace("####### Entrou em " + ReflectionUtil.m());
        filtraTipoMaterial();
    }

    public void filtraTipoMaterial() {
        tipoMaterialList = new LazyDataModel<TipoMaterial>() {

            @Override
            public List<TipoMaterial> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return m.listaTipoMaterialPaginada(montaParametros(), first, pageSize, sortField, sortOrder);
            }
        };
        tipoMaterialList.setRowCount(m.listaTipoMaterialCount(montaParametros()));

    }



    private Map<String, Object> montaParametros() {
        Map<String, Object> p = new HashMap<String, Object>();
        p.put("tipoDescricao", tipoDescricao);
        p.put("tipoCodigo", tipoCodigo);
        return p;
    }

    public String getTipoDescricao() {
        return tipoDescricao;
    }

    public void setTipoDescricao(String tipoDescricao) {
        this.tipoDescricao = tipoDescricao;
    }

    public LazyDataModel<TipoMaterial> getTipoMaterialList() {
        return tipoMaterialList;
    }

    public void setTipoMaterialList(LazyDataModel<TipoMaterial> tipoMaterialList) {
        this.tipoMaterialList = tipoMaterialList;
    }

    public String getTipoCodigo() {
        return tipoCodigo;
    }

    public void setTipoCodigo(String tipoCodigo) {
        this.tipoCodigo = tipoCodigo;
    }
}

Meu Service:

@Interceptors(AuditInterceptor.class)
    public List<TipoMaterial> listaTipoMaterialPaginada(Map<String, Object> parametros, int first, int pageSize, String sortField, SortOrder sortOrder) {
        log.debug("########### sortField: " + sortField);
        log.debug("########### sortOrder: " + sortOrder);
        String orderBy = ServiceUtil.montaOrderBy(sortField, true, PREFIXO_OBJETO);
        FiltrosConsulta filtros = criaFiltros(parametros);
        return crudService.executeQuery(QUERY_TipoMaterial, orderBy, first, pageSize, filtros, null);
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public int listaTipoMaterialCount(Map<String, Object> parametros) {
        FiltrosConsulta filtros = criaFiltros(parametros);
        Long resultado = (Long) crudService.executeQuery("select COUNT(m) from TipoMaterial m ", null, filtros).get(0);
        return resultado.intValue();
    }
    private FiltrosConsulta criaFiltros(Map<String, Object> params) {
        FiltrosConsulta filtros = new FiltrosConsulta();
        filtros.add("UPPER(m.tipoDescricao) like :tipoDescricao", "tipoDescricao", params.get("tipoDescricao"), true, FiltrosConsulta.Like.Both);
        filtros.add("UPPER(m.tipoCodigo) like :tipoCodigo", "tipoCodigo", params.get("tipoCodigo"), true, FiltrosConsulta.Like.Both);
        return filtros;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public List<TipoMaterial> listaTipoMaterialRelatorio(Map<String, Object> parametros) {
        String orderBy = ServiceUtil.montaOrderBy("tipoDescricao", true, PREFIXO_OBJETO);
        return crudService.executeQuery(QUERY_TipoMaterial, orderBy, criaFiltros(parametros));
    }
    public TipoMaterial findTipoMaterialByCodigo(String tipoCodigo) {
        if (tipoCodigo == null) {
            return null;
        }
        TipoMaterial a = (TipoMaterial) crudService.executeQuerySingleResult("select m from TipoMaterial m where m.tipoCodigo = ?1", Integer.parseInt(tipoCodigo));
        return a;
    }
Criado 2 de abril de 2013
Ultima resposta 3 de abr. de 2013
Respostas 8
Participantes 3