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

Duvida ao trazer uma lista

Boa tarde, estou com uma duvida ao trazer minha lista de Cliente para o meu html. poderiam ver se está correto?

<h:selectOneMenu>
                <f:selectItems value="#{clienteBean.getClientes()}" var="cliente"
                itemLabel="#{cliente.nome}" itemValue="#{cliente.id}"/>
            </h:selectOneMenu>

E no meu bean tenho o metodo

public List<Cliente> getClientes() {
        List<Cliente> clientes = new ArrayList();
        for(Cliente c: clientes) {
            System.out.println(c.getNome());
        }
    return clientes;    
    }

Está correto dessa maneira? porque não esta trazendo no meu html

7 respostas

Bom dia Alisson, tudo bem?

Acredito que o problema seja a chamada da Expression Language #{clienteBean.getClientes()}, o que acontece é que quando fazemos essa chamada para um getter ou setter, esse nome "get(#nome#)" ou "set(#nome#)" já é subentendido, dessa forma se colocamos #{clienteBean.getClientes()} estaríamos chamando na verdade algo como #{clienteBean.getgetClientes()}. Tente mudar a chamada da sua Expression Language para #{clienteBean.clientes} e veja se aparece o resultado esperado!

Abs

Rafael, ainda fiz a mudança e não retorno ainda a minha lista :(

Olá Alisson,

No stacktrace aparece alguma informação? A classe clienteBean está com quais anotações?

Abs

Rafael minha classe inteira do bean

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;

import br.com.bercalini.DAO.DAO;
import br.com.bercalini.nutricao.modelo.Cliente;

@ManagedBean
public class ClienteBean implements Serializable{

    private Cliente cliente = new Cliente();

    public List<Cliente> getClientes() {
        List<Cliente> clientes = new ArrayList();
        for(Cliente c: clientes) {
            System.out.println(c.getNome());
        }
    return clientes;    
    }

    public void cadastrar() {
        new DAO<Cliente>(Cliente.class).cadastrar(cliente);
        System.out.println("CADASTRADO COM SUCESSO " + cliente.getNome());
    }

    public void alterar() {

    }
    public Cliente getCliente() {
        return cliente;
    }

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

Olá Alisson,

Estou analisando o seu código da classe Bean, não cheguei a ver como é o exercício da aula, mas me parece que o que está acontecendo é o seguinte.

O método getClientes() não está fazendo uma busca no dao para trazer os clientes cadastrados, ao fazer

List<Cliente> clientes = new ArrayList();

ele está inicializando uma lista, porém essa lista não contém nenhum valor. Imagino que o seu dao deva ter um método, por exemplo getTodosClientes, parecido com o abaixo:

public List<Cliente> getTodosClientes(){
    ... "select c from cliente c"...
    return clientes;
}

Essa query vai retornar todos os clientes do banco, então no seu bean imagino que deveríamos ter algo como:

List<Cliente> clientes=dao.getTodosClientes();

Dessa forma, ao chamar o método do dao, estaríamos trazendo os clientes cadastrados no banco. Tente verificar essa parte, acredito que assim, você terá alguma resposta. Espero ter ajudado de alguma forma.

Abs

solução!

A Rafael muito obrigado, estava esquecedo de puxar o metodo no meu DAO :( putz kkk. agora fico assim meu codigo e rodo perfeitamente como o desejado.

Metodo no dao

    public List<Cliente> getTodosCliente() {
        EntityManager em = new JPAUtil().geEntityManager();
        em.getTransaction().begin();
        Query query = em.createQuery("Select c from Cliente c");
        List<Cliente> clientes = query.getResultList();
        return clientes;
    }

Metodo no bean


    public List<Cliente> getClientes() {
        DAO dao = new DAO(Class.class);
        return dao.getTodosCliente();
    }

Muito obrigado pela sua ajuda, e pela paciencia kkkk, e só para esclarecer Rafael, na video estou vendo um outro tipo de exercicio, eu fico fazendo aqui umas outras coisas para apreende :). Mais uma vez gratidao por me ajudar

Olá Alisson,

De nada, sempre que precisar pode contar conosco. Isso é muito bom, com certeza ajudará em seu aprendizado.

Abs