Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Problemas ao listar clientes

Olá, estou fazendo um projeto JSF com hibernate. E estou com dificuldade em listar os clientes, a página ListaClientes.xhtml abre vazia, não traz nenhum dos clientes que está no banco de dados. Sendo que há 3 registros no banco.

Está assim o código: Na Model: Cliente.java

package model;

...import...

@Entity
@Table(name="cliente")
public class Cliente {
    private int id;
    private String cpf;
    private String nome;
    private String Sobrenome;

    public Cliente() {
    }

    public Cliente(Integer id, String cpf, String nome, String Sobrenome) {
        this.id = id;
        this.cpf = cpf;
        this.nome = nome;
        this.Sobrenome = Sobrenome;
    }

    @Id
    @Column(name="idCliente")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSobrenome() {
        return Sobrenome;
    }

    public void setSobrenome(String Sobrenome) {
        this.Sobrenome = Sobrenome;
    }
}

No pacote DAO: ClienteDAO.java

package DAO;

import Util.HibernateUtil;
import java.util.List;
import javax.persistence.Query;
import model.Cliente;
import org.hibernate.Session;


public class ClienteDAO {
    private Cliente cliente;
    private List<Cliente> clientes;

    public void adicionarCliente(Cliente cliente){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(cliente);
        session.getTransaction().commit();
    }

    public List<Cliente> listaClientes(){

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List select = session.createQuery("from Cliente").list();
        session.getTransaction().commit();
        return select;
    }
}

na pasta Bean: ClienteMB.java

package Bean;

import DAO.ClienteDAO;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import model.Cliente;

@ManagedBean
@RequestScoped
public class ClienteMB {
    private Cliente cliente;
    private ClienteDAO clienteDAO;
    /**
     * Creates a new instance of ClienteMB
     */

    public ClienteMB() {
        }

    @PostConstruct
    public void init (){
        clienteDAO = new ClienteDAO();
        cliente = new Cliente();        
    }

    public void salvarCliente(){
        clienteDAO.adicionarCliente(this.cliente);        
    }

    public void listarClientes(){
         clienteDAO.listaClientes();

    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public ClienteDAO getClienteDAO() {
        return clienteDAO;
    }

    public void setClienteDAO(ClienteDAO clienteDAO) {
        this.clienteDAO = clienteDAO;
    }
}

E a página ListaCliente.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!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://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Lista de Clientes</title>
    </h:head>
    <h:body>
        <h:dataTable id="tabelaClientes" value="#{clienteMB.listarClientes()}" var="clientes">
            <h:column>
                <f:facet name="header">Código</f:facet>
                <h:outputLabel value="#{clientes.id}" />
            </h:column>

            <h:column>
                <f:facet name="header">CPF</f:facet>
                <h:outputLabel value="#{clientes.cpf}" />
            </h:column>

            <h:column>
                <f:facet name="header">Nome</f:facet>
                <h:outputLabel value="#{clientes.nome}" />
            </h:column>

            <h:column>
                <f:facet name="header">Sobrenome</f:facet>
                <h:outputLabel value="#{clientes.sobrenome}" />
            </h:column>
        </h:dataTable>

        <h:form>
            <h:commandButton value="Incluir Cliente"/>
        </h:form>
    </h:body>
</html>

desde já agradeço toda ajuda.

10 respostas

Essa linha List select = session.createQuery("from Cliente").list(); é onde você está fazendo a consulta?

Olá Eduardo!

É sim, nela que consulto o banco pedindo a listagem de todos os clientes.

Cara, não entendo muito de jsf, mas tenta colocar todo o comando SQL nessa linha por exemplo ("SELECT * FROM nomeDaTabela") posso estar totalmente errado por não entender de jsf.

Eu alterei para asterisco (*) mas deu erro, então alterei para:

public List<Cliente> listaClientes(){

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List select = session.createQuery("select id, cpf, nome, sobrenome from model.Cliente").list();
        session.getTransaction().commit();
        return select;
    }

Mas ainda assim, apenas traz a página vazia, não traz nenhum dos registro do banco.

Pode parecer irônico, mas veja se inseriu dados nessa tabela

Cliente

Pois se não ta dando erro, só retornando a tabela vazia, deve ser pelo fato de não ter dado algum na tabela. Espero teu feedback.

oi Eduardo!

Então, mas existe dados na tabela, tanto que quando faço o AdicionaCliente() o sistema grava nessa tabela normalmente.

Mas nessa pesquisa realmente nunca traz nada, parece que estou consultando uma tabela vazia. Estou tentando de uns outros jeitos aqui que estou encontrando na internet, mas sempre retorna vazio.

O que está acontecendo, pra trazer a tabela vazia?

Até porque agora tem 4 registros na tabela, tinha que estar trazendo eles.

1    11111111111    marciel    anjos
2    22222222222    joao    santos
3    33333333333    maria    graca
4    44444444444    pedro    sobrenome

Marciel essas eram minha únicas alternativas.

Durante o Debug, os dados aparecem:

select    ArrayList    ObjectVariable     "size = 4"    
[0]    Cliente    #1963    model.Cliente@2f906b44    
[1]    Cliente    #1964    model.Cliente@18ad2e39    
[2]    Cliente    #1965    model.Cliente@5d3be814    
[3]    Cliente    #1966    model.Cliente@6da9cea

Mas não está carregando na tela. Estou achando que pode ser algo na própria ListaClientes.xhtml

solução!

Encontrei o erro. No meu Bean.ClienteMB o listarCliente não está retornando nada...

public void listarClientes(){
         clienteDAO.listaClientes();

    }

Alterei para:

public List<Cliente> listarClientes(){
         return clienteDAO.listaClientes();

    }

E trouxe tudo normal... aff, tava quase ficando doido. Que baita falta de atenção a minha :'(...

MAS, enfim deu certo.

De todo modo valeu ae Eduardo.

Aaah, haha. Por nada Marciel. Sucesso.