Problemas com JSF e botão com ação ajax

Boa tarde,

Estou iniciando meus estudos em programação web com java server faces e estou encontrando dificuldades ao implementar uma rotina básica de consulta. Criei um projeto de testes onde utilizo o jfs, hibernate e estou tentando recuperar um parametro da tela para utilizar em uma consulta ao banco de dados e retornar o resultado nesta mesma tela em outro formulário utilizando o recurso do ajax.

Acontece que quando eu clico no botão da tela de consulta é retornado o erro abaixo:

malformedXML: Não é possivel obter a propriedade ‘removeChild’ de referência indefinida ou nula

Já pesquisei vários foruns mas não achei nada que pudesse me nortear para identificar o erro e tentar corrigi-lo. Agradeço antecipadamente aos que puderem me prestar algum auxilio pois estou batendo cabeça pra fazer isso que eu sei ser ultra rídiculo mas pra quem não tem a “manha” (que é o meu caso) não é tão simples assim. :smiley:

O meu codigo está assim:

VendaDAOHibernate

package pet.venda;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import pet.produto.Produto;

public class VendaDAOHibernate implements VendaDAO {
	private Session session;
	public void setSession(Session session){
		this.session = session;
	}
	@Override
	public void salvar(Venda venda) {
		// TODO Auto-generated method stub
		this.session.save(venda);
	}

	@Override
	public void excluir(Venda venda) {
		// TODO Auto-generated method stub
		this.session.delete(venda);
	}

	@Override
	public void atualizar(Venda venda) {
		// TODO Auto-generated method stub
		this.session.update(venda);
	}

	@Override
	public List<Produto> listar(Produto produto) {
		Criteria criteria = this.session.createCriteria(Produto.class);
		criteria.add(Restrictions.eq("produto", produto));
		return criteria.list();
	}
	@Override
	public List<Produto> buscarProduto(Produto produto) {
		Criteria criteria = this.session.createCriteria(Produto.class);
		criteria.add(Restrictions.eq("nome", produto));
		return criteria.list();
	}
}

VendaRN (regra de Negocio)

package pet.venda;
import java.util.List;
import pet.produto.Produto;
import pet.util.DAOFactory;

public class VendaRN {
	private VendaDAO vendaDAO;
	private Produto produto;
	public VendaRN(){
		this.vendaDAO = DAOFactory.cadastrarVendaDAO();
	}
	public void salvar(Venda venda){
		if(venda.getVenda()==null|| venda.getVenda()==0){
			this.vendaDAO.salvar(venda);
		}else{
			this.vendaDAO.atualizar(venda);
		}
	}	
	public void buscarProduto(Integer codProduto){
		this.vendaDAO.buscarProduto(produto);
	}
	public List<Produto> buscarProduto(Produto produto){
		return this.vendaDAO.buscarProduto(produto);
	}
}

VendaBean

package pet.web.bean;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.hibernate.Criteria;
import org.hibernate.Session;
import pet.produto.Produto;
import pet.produto.ProdutoRN;
import pet.venda.Venda;
import pet.venda.VendaRN;

@ManagedBean(name="vendaBean")
@RequestScoped
public class VendaBean {
	private Venda venda = new Venda();
	public List<Produto> listaProd;
	public List<Produto> consulta;
	private Integer produto;
	private String itemBusca;
	private Produto nome;
	private Session sessao;
	
	//### -- METODOS
		
	public void setSession(Session sessao){
		this.sessao = sessao;
	}
	public String finalizaVenda(){
		VendaRN vendaRN = new VendaRN();
		ProdutoRN produtoRN;
		if (venda.getVenda()==0||venda.getVenda()==null){
			vendaRN.salvar(venda);
			}
		return "publico/sucesso";	
	}
	public List<Produto> getListaProd() {
		if(this.listaProd==null){
			ProdutoRN produtoRN = new ProdutoRN();
			this.listaProd = produtoRN.listar();
		}
		System.out.println(this.listaProd.toString());
		return this.listaProd;
	}
	public List<Produto> consulta(){
		VendaRN vendaRN = new VendaRN();
		Produto produto = new Produto();
		this.consulta = vendaRN.buscarProduto(nome);
		return consulta;
		}
	
	public String buscarProduto(){
			VendaRN vendaRN = new VendaRN();
			Produto produto = new Produto();
			itemBusca = produto.getNome();
			vendaRN.buscarProduto(nome);
			return buscarProduto();
	}
		// ###--- GETTERS& SETTERS
	
	public void setListaProd(List<Produto> listaProd) {
		this.listaProd = listaProd;
	}

	public Venda getVenda() {
		return venda;
	}
	public void setVenda(Venda venda) {
		this.venda = venda;
	}
	public List<Produto> getConsulta() {
		return consulta;
	}
	public void setConsulta(List<Produto> consulta) {
		this.consulta = consulta;
	}
	public Integer getProduto() {
		return produto;
	}
	public void setProduto(Integer produto) {
		this.produto = produto;
	}
	public String getItemBusca() {
		return itemBusca;
	}
	public void setItemBusca(String itemBusca) {
		this.itemBusca = itemBusca;
	}
	public Session getSessao() {
		return sessao;
	}
	public void setSessao(Session sessao) {
		this.sessao = sessao;
	}
	public Produto getNome() {
		return nome;
	}
	public void setNome(Produto nome) {
		this.nome = nome;
	}
	}

Página de Consulta

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Tabela de vendas</title>
</h:head>
<h:body>
	<h:form id="buscarProdutos">
		<h:messages/>
		<h1>Item de Consulta</h1>
		<hr/>
		<hr/>
		<h:outputLabel value="Consultar produto: " for="produto"/>
		<h:inputText id="Produto" label="produto" value="#{vendaBean.produto.nome}"/>
		<h:commandButton value="lista Produto" action="#{vendaBean.buscarProduto()}">
			<f:ajax execute="@form" render=":buscarProdutos :listagemProdutos"/>
		</h:commandButton>
		<hr/>
		<hr/>
		</h:form>
	<h:form id="listagemProdutos">
		<h1>Listagem de Produtos</h1>
		<h:messages/>
		<h:dataTable value="#{vendaBean.consulta}" var="produto" rules="rows" cellpadding="6" rendered="#{!empty vendaBean.listaProd}">
		<h:column>
		<f:facet name="header">Codigo do Produto</f:facet>
		#{produto.produto}
		</h:column>
			
		<h:column>
		<f:facet name="header">Fabricante</f:facet>
		#{produto.fabricante}
		</h:column>
		
		<h:column>
		<f:facet name="header">Nome</f:facet>
		#{produto.nome}
		</h:column>
		
		<h:column>
		<f:facet name="header">Tipo</f:facet>
		#{produto.tipo}
		</h:column>
		
		<h:column>
		<f:facet name="header">Quantidade em estoque</f:facet>
		#{produto.quantidade}
		</h:column>
		
		<h:column>
		<f:facet name="header">Valor Unitário</f:facet>
		#{produto.valor}
		</h:column>
		</h:dataTable>
	</h:form>
</h:body>
</html>

desde já agradeço pelo auxilio.

Fale pra gente qual método que está dando problema, para sabermos pelo menos qual fluxo seguir :slight_smile:

Oi Rodrigo,

Esse método que é chamado pelo action do botao o retorno dele é o próprio método ??

 public String buscarProduto(){  
            VendaRN vendaRN = new VendaRN();  
            Produto produto = new Produto();  
            itemBusca = produto.getNome();  
            vendaRN.buscarProduto(nome);  
            return buscarProduto();  // é isso mesmo ???
    }  

Rodrigo, é o metodo buscarProduto() que eu estou utilizando.

[quote=gustavo_souza]Oi Rodrigo,

Esse método que é chamado pelo action do botao o retorno dele é o próprio método ??

public String buscarProduto(){ VendaRN vendaRN = new VendaRN(); Produto produto = new Produto(); itemBusca = produto.getNome(); vendaRN.buscarProduto(nome); return buscarProduto(); // é isso mesmo ??? } [/quote]

Gustavo, esse metodo acessa o VendaDAOHIbernate através do VendaRN e executa uma consulta utilizando o criteria.

  public List<Produto> buscarProduto(Produto produto) {  
        Criteria criteria = this.session.createCriteria(Produto.class);  
        criteria.add(Restrictions.eq("nome", produto));  
        return criteria.list();  
    }  

Ele deveria ter outro tipo de retorno? Eu pensei que como ele já faz uma consulta e retorna um criteria.list() no VendaDAOHIbernate bastava eu chamar novamente o método e retorna-lo que eu já teria a listagem da consulta realizada…