Error trying to save record to bank

0

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?

    
asked by anonymous 21.05.2016 / 00:20

1 answer

1

Your class Habilidade has two constructors, as you stated, however, in the Save method, you instantiated in habilidade only by the default constructor, which in this case did not assign any value to the properties of the class.

In addition, the nome and descrição attributes do not accept null. As stated in class Habilidade .

When you make get in habilidade , it will be null .

Use:

public void salvar() {
    habilidade = new Habilidade(nome, descricao, efeitoSecundario);
    
21.05.2016 / 04:53