After completing the form and clicking Save, the following error is occurring:
mai 20, 2016 7:14:52 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: javax.el.PropertyNotFoundException: /web/crud/cadastrar-habilidade.xhtml @16,80 value="#{habilidademb.habilidade.nome}": Target Unreachable, 'habilidade' returned null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:144)
at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:171)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
at javax.faces.component.UIInput.validate(UIInput.java:975)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
at javax.faces.component.UIInput.processValidators(UIInput.java:712)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1260)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1260)
at org.primefaces.component.panel.Panel.processValidators(Panel.java:287)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1260)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1260)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'habilidade' returned null
at org.apache.el.parser.AstValue.getTarget(AstValue.java:124)
at org.apache.el.parser.AstValue.getType(AstValue.java:58)
at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:168)
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
... 38 more
My bean class:
package br.com.evolutionary.controle;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import br.com.evolutionary.modelo.Habilidade;
import br.com.evolutionary.negocio.HabilidadeDAO;
@SessionScoped
@ManagedBean(name = "habilidademb")
public class ControleHabilidade {
private Habilidade habilidade;
private HabilidadeDAO dao;
private Logger log;
// Variáveis para receber o valor booleano do atributo habilidadeHidden
private boolean habilidadeHidden;
public Habilidade getHabilidade() {
return habilidade;
}
public void setHabilidade(Habilidade habilidade) {
this.habilidade = habilidade;
}
public HabilidadeDAO getDao() {
return dao;
}
public void setDao(HabilidadeDAO dao) {
this.dao = dao;
}
public boolean isHabilidadeHidden() {
return habilidadeHidden;
}
public void setHabilidadeHidden(boolean habilidadeHidden) {
this.habilidadeHidden = habilidadeHidden;
}
public void salvar() {
habilidade = new Habilidade();
FacesMessage facesMsg;
try {
if (habilidade.getId() == null) {
dao.insert(habilidade);
facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Habilidade cadastrada com sucesso!", "");
FacesContext.getCurrentInstance().addMessage("messagePanel", facesMsg);
} else {
dao.update(habilidade);
facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Habilidade alterada 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;
}
}
public void novo(){
habilidade = new Habilidade();
}
}
My entity:
package br.com.evolutionary.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",nullable=true)
private String efeitoSecundario;
@Column(length=20,nullable=true)
private String habilidadeHidden;
@Column(length=150,nullable=true)
private String descricaoHA;
public Habilidade() {
super();
}
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;
}
public String getHabilidadeHidden() {
return habilidadeHidden;
}
public void setHabilidadeHidden(String habilidadeHidden) {
this.habilidadeHidden = habilidadeHidden;
}
public String getDescricaoHA() {
return descricaoHA;
}
public void setDescricaoHA(String descricaoHA) {
this.descricaoHA = descricaoHA;
}
}
And my 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">
<h:head>
<title>Cadastro</title>
</h:head>
<h:body>
<h:form id="cadastro">
<p:panel>
<p:messages />
<h:panelGrid columns="3">
<h:outputLabel value="Nome: " rendered="true" />
<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 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.salvar()}" value="Salvar"/>
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
</html>
Where am I going wrong?