Error trying to save register in bank

Asked

Viewed 70 times

0

After filling the form and clicking Save, the error below occurs:

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?

1 answer

1


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

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

When you do get in habilidade, she’ll be null.

Utilize:

public void salvar() {
    habilidade = new Habilidade(nome, descricao, efeitoSecundario);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.