sortBy do DataTable não funciona - Primefaces

5 respostas
Saulo_Santos

Estou tendo um problema com o sortBy do Primefaces. O datatable funciona perfeito, mas o sortBy não quer funcionar. Eu já utilizei outros filtros, como o caso do filterBy e funciona.

<h:form id="FormListaConsulta">
            <h:panelGrid id="GridListaConsulta">
                <p:dataTable var="listas" id="listarconsultas" value="#{agendaBean.listarMarcacoes}"
                             emptyMessage="Nenhuma marcação encontrada"
                             >
                    
                    <p:column sortBy="#{listas.dataConsulta}" id="FiltroDta" filterBy="#{listas.dataConsulta}" filterMatchMode="exact" headerText="Data">
                        <h:outputText value="#{listas.dataConsulta}">
                        </h:outputText>
                    </p:column>
                    
                    
                    <p:column sortBy="#{listas.tipo}" headerText="Tratamento">
                        <h:outputText value="#{listas.tipo}"/>
                    </p:column>

                </p:dataTable>

            </h:panelGrid>  
        </h:form>
Meu DAO:
public List<Agenda> listarConsultas() {
        Session session = HibernateUtil.getSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Agenda").list();
        t.commit();
        return lista;
    }
Meu MB:
private DataModel listarMarcacoes;

    public DataModel getListarMarcacoes() {
        List<Agenda> lista = new DaoAgenda().listarConsultas();
        listarMarcacoes = new ListDataModel(lista);
        return listarMarcacoes;
    }

    public void setListarMarcacoes(DataModel listarMarcacoes) {
        this.listarMarcacoes = listarMarcacoes;
    }

5 Respostas

nana_ps

Evite carregar sua lista de dados nos getters. Tente uma chamada de inicialização no @PostConstruct para carregar os dados iniciais, pois quando eles são chamados muitas vezes resulta neste tipo de problema de classificação e desempenho. Algo assim…

private List<Entidade> findAll;
        ....
	@PostConstruct
	public void construct() {
		//code
		findAll = seuEJB.findAll();
	}

	public List<Entidade> findAll(){
		return findAll;
	}
        ...

xhtml

<p:dataTable id="dataTable" value="#{seulBean.findAll()}" ...
J

Obrigado resolveu o meu problema

F

Resolveu o meu também muito obrigado.

D

Cara, muito obrigado! Funcionou aqui!

R

No meu caso, eu tenho um método no meu bean onde retorno uma lista, e para povoar meu DataTable eu invoco este método.
<p:dataTable id="TBvariedade" var="variedade" value="#{variedadeController.listar()}" selectionMode="single" rowKey="#{variedade.id}" paginator="true" rows="10" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,20,30" paginatorPosition="bottom" >

Meu sortBy não funciona. Se ao invés de eu invocar o método no dataTable eu invocar uma variável que armazena o retorno do método listar() o sortBy funciona, no entanto se eu adicionar um novo dado (vide botão “+ Novo” que renderiza outra página para cadastro) o dataTable não é atualizado e o novo dado inserido não aparece como uma nova linha (mas se olhar no banco e dado etá la).

O que acontece é que to nesse empasse de ou funciona a ordenação clicando na coluna ou funciona a inserção de um novo dado. Pelo amor de Deus, alguém me da uma luz ?!

Criado 19 de março de 2012
Ultima resposta 21 de jul. de 2016
Respostas 5
Participantes 6