Erro Target Unreachable, 'null' returned null

5 respostas
T

Olá pessoal, não entendo muito de Java mas estou tendo que fazer uma aplicação web com banco de dados, mas está dando um erro quando vou cadastrar um novo cliente que minha aplicação requer. O erro é esse:

/cadastrarCliente.xhtml @16,139 value="#{papBean.cliente.nome}": Target Unreachable, 'null' returned null

Aqui está a classe cliente no módulo EJB:

~Imports~

@Entity
@Table(name = "Cliente")
@SequenceGenerator(name="CLI_SEQ", sequenceName="Cliente_Seq", initialValue=1, allocationSize=1)

public class Cliente implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="CLI_SEQ")
    @Basic(optional = false)
    @Column(name = "id")
    private Long id;
    @Column(name = "nome", nullable=false)
    private String nome;
    @Column(name = "data_nasc")
    @Temporal(TemporalType.DATE)
    private Date data_nasc;
    @Column(name = "email", nullable=false)
    private String email;
    
    
    public Cliente(){
      
    }

    public Cliente(Long id) {
        this.id = id;
    }

~ Getters e Setters~

@Override
    public int hashCode() {
        int hash = 5;
        hash = 71 * hash + Objects.hashCode(this.id);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Cliente other = (Cliente) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Cliente{" + "nome=" + nome + '}';
    }    
}

Classe DAO no módulo EJB:

~Imports~

@Stateless
public class PapDAO {
    
    @PersistenceContext(unitName = "PAP_PU")
    private EntityManager em;

    public void adicionar(Cliente cliente) throws Exception {
        
        if (cliente.getId() == null) {
            em.persist(cliente);
        } else {
            if (!em.contains(cliente)) {
                if (em.find(Cliente.class, cliente.getId()) == null) {
                    throw new Exception("Erro ao atualizar os dados do Cleinte!");
                }
            }
            em.merge(cliente);
        }
    }

    public void editar(Cliente cliente) {
        em.merge(cliente);
    }

    public void remover(Cliente cliente) {
        em.remove(em.merge(cliente));
    }

    public Cliente find(Object id) {
        return em.find(Cliente.class, id);
    }

    public List<Cliente> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        cq.select(cq.from(Cliente.class));
        return em.createQuery(cq).getResultList();
    }

    public List<Cliente> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        cq.select(cq.from(Cliente.class));
        javax.persistence.Query q = em.createQuery(cq);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<Cliente> rt = cq.from(Cliente.class);
        cq.select(em.getCriteriaBuilder().count(rt));
        javax.persistence.Query q = em.createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }     
}

Classe de Lógica de Negócio no módulo EJB:

~Imports~

@Stateless
@LocalBean
public class PapLN {
    
    @EJB
    private PapDAO dao;

    public List<Cliente> getTodosClientes() {
        return dao.findAll();
    }
    
    public void adicionarCliente(Cliente cliente) throws Exception{
        dao.adicionar(cliente);
    }
    
    public void removerCliente(Cliente cliente){
        dao.remover(cliente);
    } 
}

Classe de ManagedBean no projeto Web:

~Imports~

@ManagedBean
@SessionScoped
public class PapBean {
    
    @EJB
    private PapLN papLN;

    private List<Cliente> clientes;
    private Cliente cliente;

    public PapBean() {
    }

    public String setarCliente() {
        cliente = new Cliente();
        return "/cadastrarCliente";
    }

    public List<Cliente> getClientes() {
        clientes = papLN.getTodosClientes();
        return clientes;
    }

    public String adicionarCliente() throws Exception {
        papLN.adicionarCliente(cliente);
        return "/cadastrarCliente";
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
    
    public String editarCliente(){
        
        return "listarClientes";
    }
    
    public String removerCliente(){
        papLN.removerCliente(cliente);
        return "listarClientes";
    }
}

O form na página Web que faz o cadastro:

<h:form>                       
                        
                    <h:outputLabel value="Nome: " for="nome" />
                            
                    <h:inputText class="form-control" id="nome" value="#{papBean.cliente.nome}" title="Nome" required="true"/><br/>
                            
                    <h:outputLabel  value="Email: " for="email" />
                            
                    <h:inputText class="col-md-3 form-control" id="email" value="#{papBean.cliente.email}" title="Email" /><br/>
                            
                    <h:outputLabel  value="Data de Nascimento " for="data_nasc" />
                            
                    <h:inputText class="col-md-3 form-control" id="data_nasc" value="#{papBean.cliente.data_nasc}" title="Data de Nascimento" /><br/>
                            
                    <h:commandButton class="btn btn-primary col-md-1" value="Cadastrar" action="#{papBean.adicionarCliente()}"/>
                                               
                </h:form>

5 Respostas

adriano_si

Você chama seu cadastrarCliente.xhtml a partir do método setarCliente()?

http://java.sg/target-unreachable-xxx-returned-null/

T

Oi Adriano.

a página cadastrarCliente.xhtml eu chamo na minha aplicação web, tem uma página Cliente.xhtml que tem um botão “Cadastrar Cliente” com action pra ir pra página cadastrarCliente.xhtml.

Sobre esse link que você mandou eu não entendi muito bem eu teria que fazer aquela solução que ele propôs.

adriano_si

teteudantas:
a página cadastrarCliente.xhtml eu chamo na minha aplicação web, tem uma página Cliente.xhtml que tem um botão “Cadastrar Cliente” com action pra ir pra página cadastrarCliente.xhtml.

Qual método é chamado do seu ManagedBean de dentro de Cliente.xhtml é o setarCliente()?

Seria o fato de seu cliente estar Nulo. Ou seja, teria que criar um new Cliente() no construtor do MB ou em um método init anotado com @PostConstruct

Abs :wink:

T

Agora está dando outro erro: Erro de conversão ao definir o valor ‘dd/mm/aaaa’ para ‘null Converter’.

thonzinho

Boa noite,
estava com este problema… segui o conselho do amigo acima.

Criei um Construtor na MB
e criei um novo objeto dentro dele e owala… deu certo!
:slight_smile: :slight_smile: :slight_smile:

agora porque no livro que estou seguindo não tem essa observação né?
Vou revisar o código passo a passo para saber se o livro não está em falta kkkkk
abs

Criado 28 de outubro de 2014
Ultima resposta 28 de abr. de 2015
Respostas 5
Participantes 3