-1
Before the data goes to the bank I’m with a nullpointer
that already debugged and I can’t find where the problem is. Down with my classes:
package br.com.pokemax.controle;
import java.io.Serializable;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import br.com.pokemax.modelo.Habilidade;
import br.com.pokemax.negocio.HabilidadeDAO;
@ViewScoped
@ManagedBean(name = "habilidademb")
public class ControleHabilidade implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Logger log;
private Habilidade habilidade;
private HabilidadeDAO dao;
private Boolean habilidadeHidden;
public Habilidade getHabilidade() {
return habilidade;
}
public void setHabilidade(Habilidade habilidade) {
this.habilidade = habilidade;
}
public Boolean getHabilidadeHidden() {
return habilidadeHidden;
}
public void setHabilidadeHidden(Boolean habilidadeHidden) {
this.habilidadeHidden = habilidadeHidden;
}
@PostConstruct
public void novo() {
habilidade = new Habilidade();
}
public void gravar() {
FacesMessage facesMsg;
try {
if (habilidade.getId() == null) {
dao.insert(habilidade);
facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Gravação realizada com sucesso!", "");
FacesContext.getCurrentInstance().addMessage("messagePanel", facesMsg);
} else {
habilidade = dao.update(habilidade);
facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro Atualizado com sucesso!", "");
FacesContext.getCurrentInstance().addMessage("messagePanel", facesMsg);
}
} catch (Exception e) {
facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro:" + e.getMessage(), "");
FacesContext.getCurrentInstance().addMessage("messagePanel", facesMsg);
log.warning("Erro: " + e.getMessage());
return;
}
}
}
Model:
package br.com.pokemax.modelo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotBlank;
@Entity
@Table(name="tb_habilidade")
public class Habilidade implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Column(length=20,nullable=false)
private String nome;
@NotNull
@Column(length=150,nullable=false)
private String descricao;
@Column(name="efeito_secundario")
private String efeitoSecundario;
public Habilidade() {
}
public Habilidade(String nome, String descricao, String efeitoSecundario) {
super();
this.nome = nome;
this.descricao = descricao;
this.efeitoSecundario = efeitoSecundario;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEfeitoSecundario() {
return efeitoSecundario;
}
public void setEfeitoSecundario(String efeitoSecundario) {
this.efeitoSecundario = efeitoSecundario;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((descricao == null) ? 0 : descricao.hashCode());
result = prime * result + ((efeitoSecundario == null) ? 0 : efeitoSecundario.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Habilidade other = (Habilidade) obj;
if (descricao == null) {
if (other.descricao != null)
return false;
} else if (!descricao.equals(other.descricao))
return false;
if (efeitoSecundario == null) {
if (other.efeitoSecundario != null)
return false;
} else if (!efeitoSecundario.equals(other.efeitoSecundario))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}
}
DAO:
package br.com.pokemax.negocio;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import br.com.pokemax.modelo.Habilidade;
@Stateless
@LocalBean
public class HabilidadeDAO implements DAO<Habilidade,String>{
@Inject
private EntityManager em;
@Inject
private Logger log;
@Override
public Habilidade insert(Habilidade t) throws Exception {
log.info("Persistindo " + t);
em.persist(t);
return t;
}
@Override
public Habilidade update(Habilidade t) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Habilidade delete(Habilidade t) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Habilidade find(String k) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Habilidade> findAll() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
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://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/layout/template.xhtml">
<ui:define name="content">
<h:form>
<p:panel header="Cadastrando Habilidades">
<p:messages />
<h:panelGrid id="cadastro" columns="3">
<h:outputLabel value="Nome: " />
<p:inputText id="nome" value="#{habilidademb.habilidade.nome}" size="20" />
<p:message for="nome" />
<h:outputLabel value="Descrição: " rendered="true" />
<p:inputTextarea id="descricao"
value="#{habilidademb.habilidade.descricao}" rows="6" cols="20" />
<p:message for="descricao" />
<h:outputLabel id="efeitoS" value="Possui efeito secundário? : " />
<p:selectBooleanButton id="efeito"
value="#{habilidademb.habilidadeHidden}" onLabel="Sim"
offLabel="Não" style="width:60px" />
<p:message for="efeito" />
<h:outputLabel value="Efeito Secundário: "
rendered="#{habilidademb.habilidadeHidden == true}" />
<p:inputTextarea id="secundario"
value="#{habilidademb.habilidade.efeitoSecundario}" rows="6"
cols="20" rendered="#{habilidademb.habilidadeHidden == true}" />
<p:message for="secundario" />
<p:commandButton action="#{habilidademb.gravar}" value="Salvar" update="cadastro"/>
</h:panelGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</html>
Classe Util:
package br.com.pokemax.util;
import java.util.logging.Logger;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
public class JPAUtil {
@Produces
@PersistenceContext
EntityManager em;
@Produces
public Logger produceLog(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
}
I’m trying to debug this case more, I noticed that when it arrives in the DAO class, it reads the line:
log.info("Persistindo " + t);
Then he falls in catch
. The error shown in the console is:
13:33:20,806 WARNING [br.com.pokemax.controle.Controllability] (default task-8) Error: null
Where is that line?
– user28595
@diegofm next to Try in the Control class.
– Roknauta
@Douglas Did the answer solve what you were looking for? Do you think you can accept it now? If not, do you need something better? You can accept any of them, including yours.
– Maniero