Duvida rich:datatable e Criteria

2 respostas
S

Estou com o seguinte problema:

Em minha jsp eu tenho uma pagina para pesquisar os clientes, na qual tem um jsp (listacliente.jsp) que é incluida, nela a um rich:datatable para mostrar os
dados vindos do banco.
Eu estou tentando fazer uma filtragem nessa lista para que mostre apenas os dados selecionados pelas condicoes passadas ao metodo.
O problema primeiro problema é:

Se deixo assim na JSP

<rich:dataTable id="clientes" value="#{conClienteHandler.clientes}"
			var="c" rendered="#{not empty conClienteHandler.clientes}" rows="5">

e no bean deixo assim

private List<Cliente> clientes = new ArrayList<Cliente>();

public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
}

public List<Cliente> getClientes() {
		System.out.println("Lendo Clientes...");
		Session session = HibernateUtil.currentSession();
		Dao<Cliente> dao = new Dao<Cliente>(session, Cliente.class);
		return dao.list();
}

no Dao generico o list esta assim

@SuppressWarnings("unchecked")
	public List<T> list() {
		logger.info("Listando todos");
		return session.createCriteria(persistentClass).list();
}

A pagina JSP é exibida normalmente, e me traz todos os clientes cadastrados.

Mais se coloco assim:

<rich:dataTable id="clientes" value="#{conClienteHandler.criaLista}"
			var="c" rendered="#{not empty conClienteHandler.criaLista}" rows="5">

no bean

@SuppressWarnings("unchecked")
	public List<Cliente> listaLocalizar(String nome) {

		Session session = HibernateUtil.currentSession();
		Criteria criteria = session.createCriteria(Cliente.class);
		Criteria subCriteria = criteria.createCriteria("Cliente");
		subCriteria.add(Restrictions.like("nome_cli", nome));
		return criteria.list();

}

	@SuppressWarnings("unchecked")
	public List<Cliente> getCriaLista() {

		return listaLocalizar(this.cliente.getNome());

}

A pagina nem chega a ser exibida, dando o erro:

WARNING: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@ba5a81) threw exception
javax.faces.FacesException: org.apache.jasper.el.JspELException: /ListaCliente.jsp(8,2) ‘#{not empty conClienteHandler.criaLista}’ Error reading ‘criaLista’ on type br.com.saudetotal.ConClienteHandler

E o segundo problema é:

Estou tentando entender o funcionamento do Criteria e não tenho certeza se está certo para me trazer os clientes que eu fornecer o nome.

Agradeceria muito se alguem pudesse ajudar.
Abracos

Dimas

2 Respostas

lcegatti

O correto para o seu Criteria seria:

Criteria criteria = session.createCriteria(Cliente.class);  
 criteria.add(Restrictions.like("nome_cli", nome));  
 return criteria.list();

Pois anteriormente:

Criteria criteria = session.createCriteria(Cliente.class);  
Criteria subCriteria = criteria.createCriteria("Cliente");  
subCriteria.add(Restrictions.like("nome_cli", nome));

O seu subCriteria provavelmente era uma nova referência que não surtia mais efeito no objeto criteria.

[]'s

S

Ola Icegatti

Eu modifiquei, mais o erro ao acessar a pagina persisti.
O que não estou entendendo, é pq chamando a pagina com o codigo igual está no primeiro exemplo, abre normalmente e exibi
todos os clientes cadastrados.
Já no segundo, ele nem exibi a tela.

Porque até onde eu entendo, ele pega os dados por reflection ao carregar a pagina. E é exatamente nesse momento que o erro
aparece, só que no exemplo 2 eu dou um return do tipo list p ele tbm, porque do erro ? :S

Obrigado por ajudar

Criado 10 de outubro de 2008
Ultima resposta 10 de out. de 2008
Respostas 2
Participantes 2