Problemas com sortBy do primefaces usando hibernate

9 respostas
rtva

Ola a todos,

Estou tentando implementar o sortBy na minha dataTable mas não esta dando certo, quando clico na seta para ordenas ele roda o script sem o order by, segue código para análise.

procedimento.xhtml

<p:layoutUnit position="center">
			<h1>Gerenciador de Procedimento</h1>
			<br />


			<h:form prependId="false">
				<h:panelGrid style="margin: 0pt auto;">
					<p:toolbar>
						<p:toolbarGroup>
							<p:commandButton value="Adicionar Procedimento"
								actionListener="#{procedureController.prepararAdicionarProcedure}"
								update="infosProcedure" oncomplete="dialogGerProcedure.show()"
								image="ui-icon-plus">
								<p:divider>
									<p:commandButton value="Listar Procedimento" image="ui-icon-search" />
								</p:divider>
							</p:commandButton>

							<p:dataTable id="tabela_procedure" var="procedure" value="#{procedureController.listarProcedures}" rows="20"
								paginator="true" >
								<p:column sortBy="#{procedure.description}">
									<f:facet name="header">
										<h:outputText value="Descrição" />
									</f:facet>
									<h:outputText value="#{procedure.description}" />
								</p:column>
								<p:column>
									<p:commandButton
										actionListener="#{procedureController.prepararAlterarProcedure}"
										image="ui-icon-pencil" update="infosProcedure"
										oncomplete="dialogGerProcedure.show()" />
									<p:commandButton
										actionListener="#{procedureController.excluirProcedure}"
										image="ui-icon-trash" />
								</p:column>
							</p:dataTable>
						</p:toolbarGroup>
					</p:toolbar>
				</h:panelGrid>
			</h:form>
		</p:layoutUnit>

O método que retorna a lista

public List<Procedure> list() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		List lista = session.createQuery("from Procedure").list();
		t.commit();
		return lista;
	}

Falta algo no método list que eu não sei o que é para que seja recebido o valor do order by

Aguardo Ajuda
Obrigado

9 Respostas

Hebert_Coelho

Se sua consulta não tem order by, como ela será executa com order by? List lista = session.createQuery("from Procedure").list(); Seu MB está como Session ou ViewScoped? Só isso já deveria bastar para ele ordenar. O que o primefaces faz é pegar o resultado da pesquisa, salvar na sessão e ordenar a partir daí.

rtva

ola jake

Esta como SessionScoped, mas eu preciso colocar algum parametro para que o método receba e coloco o orderby por esse parametro?

Hebert_Coelho

Não, teoricamente já deveria estar ordenando. Não está?

Hebert_Coelho

Outra coisa, seu MB implements Serializable?

rtva

não, esta entrando no método list() e logando

Hibernate: select procedure0_.codigo as codigo2_, procedure0_.procdescription as procdesc2_2_ from ga_newprocedure procedure0_

Hebert_Coelho

Faça um teste, coloque seu datatable dentro de um form mas fora do <p:layoutUnit position=“center”>

rtva

antes do list() tem um controler, será que esta se perdendo por ai?

@ManagedBean
@SessionScoped
public class ProcedureController {

    private Procedure procedure;
    private DataModel listaProcedures;

    public DataModel getListarProcedures() {
        List<Procedure> lista = new ProcedureDaoImp().list();
        listaProcedures = new ListDataModel(lista);
        return listaProcedures;
    }
...
}
Hebert_Coelho

Acho que o problema é que você retorna uma lista nova toda vez.

Tente fazer assim:
private List<Procedure> procedures;
	
	public List<Procedure> getListarProcedures() {
		if(procedures == null){
			Session session = HibernateUtil.getSessionFactory().openSession();
			Transaction t = session.beginTransaction();
			List lista = session.createQuery("from Procedure").list();
			t.commit();
		}
		
		return procedures;
	}
rtva

JakeFrog,

Apenas alterei a linha
List lista = session.createQuery(“from Procedure”).list();

para
procedures = session.createQuery(“from Procedure”).list();

Funcionou perfeitamente, muito obrigado e tenha um ótimo feriado.

Criado 5 de abril de 2012
Ultima resposta 5 de abr. de 2012
Respostas 9
Participantes 2