Ordenação na Datatable

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…

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

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

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)

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

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

posta ela ai.

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

posta ela ai.[/quote]

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

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

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;
    }