JSF - Erro de NullPointerException

4 respostas
leslie-UFT

Estou com problema que após executo qualquer operação (insert, delete, update), coloquei para aplicação setar o Objeto e lista para null, pois para evitar uma consulta ao banco.
Mas dae quando clico em qualquer outra operação ocorre esse erro.
Segue em anexo a imagem do erro

Model (PessoaFisica)
package model;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Lesliê Cardoso da Silva
 * @since  03-11-2010
 */
public class PessoaFisica {
    private Integer id_pessoa_fisica;
    private String nome;
    private String cpf;
    private Documento documento;
    private List<Fone> listaFone;

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public Integer getId_pessoa_fisica() {
        return id_pessoa_fisica;
    }

    public void setId_pessoa_fisica(Integer id_pessoa_fisica) {
        this.id_pessoa_fisica = id_pessoa_fisica;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Documento getDocumento() {
        if(documento == null){
            documento = new Documento();
        }
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public List<Fone> getListaFone() {
        if(listaFone==null){
            listaFone = new ArrayList<Fone>();
        }
        return listaFone;
    }

    public void setListaFone(List<Fone> listaFone) {
            this.listaFone = listaFone;
    }

}

DAO (PessoaFisica)

package dao;

import Validator.CPFValidator;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import model.Documento;
import model.Fone;
import model.PessoaFisica;
import util.Conexao;
import util.ExceptionDatabase;

/**
 *
 * @author Lesli&#65533; Cardoso da Silva
 * @since  03-11-2010
 */
public class PessoaFisicaDAO {
    protected Integer getIdSequence(Conexao con) throws ExceptionDatabase
    {
        String sql = "select nextval('sisrh.id_pessoa_fisica_seq')";
        Statement stmt;
        
        try
        {
            stmt = con.getCon().createStatement();
            ResultSet rs= stmt.executeQuery(sql);

            if(rs.next())
            {
                return (rs.getInt(1));
            }
            return null;
        }
        catch(SQLException e)
        {
            throw new ExceptionDatabase(e.getMessage());
        }
    }

    public Boolean adicionarTelefone(PessoaFisica pf, List<Fone> listaFones, Conexao con) throws ExceptionDatabase{
       FoneDAO fDAO = new FoneDAO();
       for(Fone f:pf.getListaFone())
       {
            try
            {
               fDAO.insert(con, f);
            }
            catch (ExceptionDatabase e)
            {
                throw new ExceptionDatabase(e.getMessage());
            }
       }
       return Boolean.TRUE;
    }
    
    public Boolean insert(PessoaFisica pf, List<Fone> listaFones) throws ExceptionDatabase{
        StringBuilder sql = new StringBuilder();
        Conexao con = new Conexao();
        
        sql.append("INSERT INTO sisrh.pessoafisica(id_pessoa_fisica, nome, cpf) ");
        sql.append("VALUES (?, ?, ?); ");

        try
        {
            con.open(false);
            CPFValidator C = new CPFValidator();
            C.validate(null, null, pf.getCpf());

            pf.setId_pessoa_fisica(this.getIdSequence(con));

            PreparedStatement stmt = con.getPreparedStatement(sql.toString());

            stmt.setInt(1,pf.getId_pessoa_fisica());
            stmt.setString(2,pf.getNome());
            stmt.setString(3,pf.getCpf());
            con.executeSQL(stmt);

            DocumentoDAO doc = new DocumentoDAO();
            doc.insert(con,pf.getDocumento(),pf);
            
            adicionarTelefone(pf, pf.getListaFone(),con);
            /*for(Fone f:pf.getListaFone() ){
                fDAO.insert(con, f);
            }*/

            con.commit();
            return Boolean.TRUE;
        }
        catch(ExceptionDatabase e)
        {
            con.rollBack();
            throw new ExceptionDatabase("Erro: "+e.getMessage());
        }
        catch(SQLException e)
        {
            con.rollBack();
            throw new ExceptionDatabase("Erro: "+e.getMessage());
        }
        finally{
            con.close();
        }
    }
    
    public Boolean delete(PessoaFisica pf) throws ExceptionDatabase{
        StringBuilder sql = new StringBuilder();
        Conexao con = new Conexao();
        
        sql.append("DELETE FROM sisrh.pessoafisica WHERE id_pessoa_fisica = ? ");

        try
        {
            con.open();

            PreparedStatement stmt = con.getPreparedStatement(sql.toString());
            stmt.setInt(1,pf.getId_pessoa_fisica());
            con.executeSQL(stmt);
            
            return Boolean.TRUE;
        }
        catch(ExceptionDatabase e)
        {
            con.rollBack();
            throw new ExceptionDatabase("Erro: "+e.getMessage());
        }
        catch(SQLException e)
        {
            con.rollBack();
            throw new ExceptionDatabase("Erro: "+e.getMessage());
        }
        finally{
            con.close();
        }
    }
    
    public List<PessoaFisica> findPessoaFisicaForNome(PessoaFisica pf) throws ExceptionDatabase{
        StringBuilder sql = new StringBuilder();

        sql.append("SELECT * FROM sisrh.pessoafisica ");
        sql.append("INNER JOIN sisrh.documento ON ");
        sql.append("pessoafisica.id_pessoa_fisica = documento.id_pessoa_fisica ");
        sql.append("WHERE nome ilike ? ");

          try
          {
              Conexao con = new Conexao();
              con.open();
                PreparedStatement stm = con.getPreparedStatement(sql.toString());
                stm.setString(1,"%"+((pf.getNome()==null)?"":pf.getNome())+"%");
                ResultSet rs = con.execQuery(stm);
                List<PessoaFisica> list = new ArrayList<PessoaFisica>();
                while(rs.next()){
                    PessoaFisica lpf = new PessoaFisica();
                    lpf.setId_pessoa_fisica(rs.getInt("id_pessoa_fisica"));
                    lpf.setNome(rs.getString("nome"));
                    lpf.setCpf(rs.getString("cpf"));
                    Documento doc = new Documento();
                    doc.setNumero_certidao(rs.getString("numero_certidao"));
                    doc.setOrgao_expedidor(rs.getString("orgao_expedidor"));
                    doc.setRg(rs.getString("rg"));
                    lpf.setDocumento(doc);
                    list.add(lpf);
                }
                return list;
            } catch (ExceptionDatabase e) {
                    throw new ExceptionDatabase(e.getMessage());
            } catch (SQLException e) {
                    throw new ExceptionDatabase(e.getMessage());
            }
    }

    public PessoaFisica findPessoaFisicaForId(PessoaFisica pf) throws ExceptionDatabase{
        String sql = "SELECT * FROM sisrh.pessoafisica INNER JOIN sisrh.documento ON pessoafisica.id_pessoa_fisica = documento.id_pessoa_fisica WHERE cpf = ? ";
        try {
            Conexao con = new Conexao();
            con.open();
            PreparedStatement stm = con.getPreparedStatement(sql);
            stm.setString(1,pf.getCpf());
            ResultSet rs = con.execQuery(stm);
            if(rs.next()){
                pf.setId_pessoa_fisica(rs.getInt("id_pessoa_fisica"));
                pf.setNome(rs.getString("nome"));
                pf.setCpf(rs.getString("cpf"));
                Documento doc = new Documento();
                doc.setNumero_certidao(rs.getString("numero_certidao"));
                doc.setOrgao_expedidor(rs.getString("orgao_expedidor"));
                doc.setRg(rs.getString("rg"));
                pf.setDocumento(doc);
            }
            return pf;
        } catch (ExceptionDatabase e) {
            throw new ExceptionDatabase(e.getMessage());
        } catch (SQLException e) {
            throw new ExceptionDatabase(e.getMessage());
        }
       

    }

    public Boolean update(PessoaFisica pf, List<Fone> listaFones) throws ExceptionDatabase {
        StringBuilder sql = new StringBuilder();
        Conexao con = new Conexao();

        sql.append("UPDATE sisrh.pessoafisica ");
        sql.append("SET nome =?, cpf = ? ");
        sql.append("WHERE id_pessoa_fisica = ?");

        try
        {
            con.open(false);

            PreparedStatement stmt = con.getPreparedStatement(sql.toString());

            stmt.setString(1,pf.getNome());
            stmt.setString(2,pf.getCpf());
            stmt.setInt(3,pf.getId_pessoa_fisica());
            con.executeSQL(stmt);

            DocumentoDAO doc = new DocumentoDAO();
            //if(pf.getDocumento().getPessoafisica().getId_pessoa_fisica() != null) {
                doc.update(con, pf.getDocumento(), pf);
            //}

            adicionarTelefone(pf, pf.getListaFone(),con);

            con.commit();
            return Boolean.TRUE;
        }
        catch(ExceptionDatabase e)
        {
            con.rollBack();
            throw new ExceptionDatabase("Erro: "+e.getMessage());
        }
        catch(SQLException e)
        {
            con.rollBack();
            throw new ExceptionDatabase("Erro: "+e.getMessage());
        }
        finally{
            con.close();
        }
    }

}

Control (PessoaFisica)

package control;

import Validator.PessoaValidator;
import dao.FoneDAO;
import java.util.List;

import dao.PessoaFisicaDAO;
import model.Fone;
import model.PessoaFisica;
import util.ExceptionDatabase;

/**
 *
 * @author Lesliê Cardoso da Silva
 * @since  03-11-2010
 */
public class PessoaController extends MessageController {
    private PessoaFisica pessoa;
    private List<PessoaFisica> listpessoa;
    private List<Fone> listfone;
    private Fone fone;

    public List<Fone> getListfone() throws ExceptionDatabase {
        if(listfone == null)
        {
            try {
                FoneDAO fDAO = new FoneDAO();
                listfone = fDAO.findById(getPessoa());
            } catch (ExceptionDatabase e) {
                throw new ExceptionDatabase(e.getMessage());
            }
        }
        return listfone;
    }


    public void setListfone(List<Fone> listfone) {
        this.listfone = listfone;
    }

    public PessoaFisica getPessoa() {
        if(pessoa == null){
            pessoa = new PessoaFisica();
        }
        return pessoa;
    }

    public void setPessoa(PessoaFisica pessoa) {
        this.pessoa = pessoa;
    }

    public void insert() {
        PessoaFisicaDAO pfDAO = new PessoaFisicaDAO();

        PessoaValidator v = new PessoaValidator();
        v.validate(null, null, getPessoa());
        try
        {
            pfDAO.insert(getPessoa(),getPessoa().getListaFone());
            setPessoa(null);
            setListpessoa(null);
            setInfoMessage("Pessoa inserida com sucesso!");
        }
        catch(ExceptionDatabase e)
        {
            setErroMessage("Ocorreu um erro ao inserir a pessoa! "+e.getMessage());
        }
    }


    public void update(){
        PessoaFisicaDAO pfDAO = new PessoaFisicaDAO();

        try
        {
            pfDAO.update(getPessoa(),getPessoa().getListaFone());
            setPessoa(null);
            setListpessoa(null);
            setInfoMessage("Pessoa atualizada com sucesso!");
        }
        catch(ExceptionDatabase e)
        {
            setErroMessage("Ocorreu um erro ao atualizar a pessoa! Verifique senão encontra inserido a pessoa com este CPF.");
        }

    }

    public void acaoAddFone(){
        getFone().setPessoafisica(getPessoa());
        getPessoa().getListaFone().add(getFone());
        setFone(null);
    }
    
    public void findPessoaFisicaForId(){
        PessoaFisicaDAO pfDAO = new PessoaFisicaDAO();

        try
        {
            setPessoa(pfDAO.findPessoaFisicaForId(getPessoa()));
            if(getPessoa().getId_pessoa_fisica() == null){
                    setInfoMessage("Pessoa não encontrada!");
            }
        }
        catch (ExceptionDatabase e)
        {
            setErroMessage(e.getMessage());
        }
    }

    public List<PessoaFisica> getListpessoa() {
        if(listpessoa==null)
        {
            try {
                    PessoaFisicaDAO pfDAO = new PessoaFisicaDAO();
                    listpessoa = pfDAO.findPessoaFisicaForNome(getPessoa());
            } catch (ExceptionDatabase e) {
                    setErroMessage(e.getMessage());
            }
        }
        return listpessoa;
    }

    public void setListpessoa(List<PessoaFisica> listpessoa) {
            this.listpessoa = listpessoa;
    }

    public void acaoLimpar(){
            setPessoa(null);
    }

    public Fone getFone() {
            if(fone==null){
                    fone = new Fone();
            }
            return fone;
    }

    public void setFone(Fone fone) {
            this.fone = fone;
    }

    public void delete(){
        PessoaFisicaDAO pfDAO = new PessoaFisicaDAO();

        try
        {
            pfDAO.delete(getPessoa());
            setPessoa(null);
            setListpessoa(null);
            setInfoMessage("Pessoa excluída com sucesso!");
        }
        catch(ExceptionDatabase e)
        {
            setErroMessage("Ocorreu um erro ao excluir esta pessoa! "+e.getMessage());
        }
    }
    
}

View (PessoaFisica)

<!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:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.prime.com.tr/ui">

<h:head>
    <title>:: SisRH - Cadastro de Pessoas ::</title>
    <p:resources />
</h:head>
<f:view>
<h:body>
    <ui:composition template="template.xhtml">
        <!--  -->
        <ui:define name="conteudo">
            <p:messages/>
            <h:form prependId="false">
                <h:outputLabel value="Cadastrar pessoa" style="font-family:Arial; font-size: 20px; font-weight: bolder; color: white;" />
                <div style="float: right">
                    <h:commandButton id="btnVoltar" action="listarPessoa.jsf" immediate="true" value="Voltar" />
                </div>
                <br/>
                <br/>
                <fieldset><legend>Informações pessoais</legend>
                <h:panelGrid columns="2">
                    <h:outputLabel for="cpf" value="*CPF:" style="cursor: pointer;" />
                    <h:panelGroup>
                        <p:inputMask value="#{pessoaController.pessoa.cpf}" validator="cpfValidator" converter="cpfConverter"  id="cpf" mask="[CPF removido]" autocomplete="off" maxlength="11" />
                    <h:commandLink action="#{pessoaController.findPessoaFisicaForId}" ><h:graphicImage value="img/lupa.gif"/></h:commandLink>
                    </h:panelGroup>
                    <h:outputLabel for="nome" value="*Nome:" style="cursor: pointer;" />
                    <h:inputText value="#{pessoaController.pessoa.nome}" id="nome" autocomplete="off" size="60" maxlength="200" />
                </h:panelGrid>
                </fieldset>
                <fieldset><legend>Documentos pessoais</legend>
                    <h:panelGrid columns="2">
                        <h:outputLabel for="rg" value="RG:" style="cursor: pointer;"/>
                        <h:inputText value="#{pessoaController.pessoa.documento.rg}" id="rg" autocomplete="off" maxlength="15"/>
                        <h:outputLabel for="orgao_expedidor" value="Orgão Expedidor:" style="cursor: pointer;"/>
                        <h:inputText value="#{pessoaController.pessoa.documento.orgao_expedidor}" id="orgao_expedidor" autocomplete="off" maxlength="15"/>
                        <h:outputLabel for="numero_certidao" value="Número da Certidão:" style="cursor: pointer;"/>
                        <h:inputText value="#{pessoaController.pessoa.documento.numero_certidao}" id="numero_certidao" autocomplete="off" maxlength="15"/>
                    </h:panelGrid>
                </fieldset>
                <fieldset><legend>Telefones</legend>
                <h:panelGrid columns="5">
                    <h:outputText value="Prefixo"/>
                        <p:inputMask mask="99" id="prefixo" size="5" autocomplete="off" value="#{pessoaController.fone.prefixo}"/>
                    <h:outputText value="Número"/>
                        <p:inputMask mask="9999-9999" id="numero" converter="telefoneConverter" autocomplete="off" value="#{pessoaController.fone.numero}"/>
                    <h:commandButton value="+" action="#{pessoaController.acaoAddFone}"/>
                </h:panelGrid>
                <p:dataTable var="obj" value="#{pessoaController.pessoa.listaFone}" rendered="#{! empty pessoaController.pessoa.listaFone}">
                    <p:column headerText="Prefixo" >
                        <h:outputText value="#{obj.prefixo}" />
                    </p:column>
                    <p:column headerText="Número do Telefone" >
                        <h:outputText value="#{obj.numero}" />
                    </p:column>
                </p:dataTable>
                </fieldset>
                <h:panelGrid columns="4">
                    <h:commandButton action="#{pessoaController.insert}" disabled="#{pessoaController.pessoa.id_pessoa_fisica != null}" id="btnInserir" value="Inserir" />
                    <h:commandButton action="#{pessoaController.update}" disabled="#{pessoaController.pessoa.id_pessoa_fisica == null}" id="btnSalvar" value="Salvar" />
                    <h:commandButton id="btnLimpar" action="#{pessoaController.acaoLimpar}"  disabled="#{pessoaController.pessoa.id_pessoa_fisica == null}" value="Limpar" />
                </h:panelGrid>
            </h:form>
        </ui:define>
    </ui:composition>
</h:body>
</f:view>
</html>

4 Respostas

K

Se você observar o Stack Trace poderá verificar onde está o atributo nulo.

leslie-UFT

Aparece esse erro aqui:

java.lang.NullPointerException at com.sun.faces.application.view.StateManagementStrategyImpl$4.invokeContextCallback(StateManagementStrategyImpl.java:289) at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:1253) at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:672) at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:1262) at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:672) at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:284) at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:177) at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:131) at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:430) at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:143) at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:199) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.java:619)

LPJava

se vc seta o atributo como null e depois chama ele com algum . (ponto) é exceção na certa. Altere de null para " " se for uma string por exemplo.

leslie-UFT

Seguinte no controller tenho dois atributos:
PessoaFisica e ListaPessoa (Os dois com get e set). Em seus metodos get tem um if que caso for igual a null,
no caso PessoaFisica vai ter PessoaFisica pf = new PessoaFisica(), e na lista ListaPessoa p = new ListaPessoa();
Então não tem como setar com " " pois é do tipo objeto.
Então qual seria a melhor forma de fazer, pois quando não setPessoa como null, na lista mostra que ja inseri,
mas dae vou clicar na ação de editar e excluir ja ocorre esse problema.
Desde de já agradeço brother.

Criado 5 de novembro de 2010
Ultima resposta 7 de nov. de 2010
Respostas 4
Participantes 3