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>
