Erro JSF+Facelets[RESOLVIDO]

Boa tarde Pessoal

Estou seguindo alguns tutoriais e comecei a desenvolver um projeto de teste mas estou com um erro na execução. Por favor, peço que alguém me ajude.

Desde já agradeço a ajuda de todos.

Classe modelo

import java.util.Date;

public class Contato {
    private int codigo;
    private String nome;
    private String telefone;
    private String celular;
    private Date dataNascimento;
    private String endereco;
    private String cidade;
    private String estado;

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getNome() {
        return nome;
    }

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

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
 

}

Classe para conexao com banco de dados.

public class FabricaConexao {
    private java.sql.Connection conexao;

    public Connection fazConexao(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conexao =java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/agenda","root","123456");
    
        } catch (Exception e) {
        }
        return conexao;
       
    }

    public void fecharConexao(){
        try {
            conexao.close();
        } catch (Exception e) {
        }
    }


}

Classe de controle

package beans;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import modelo.Contato;

@ManagedBean
@SessionScoped
public class ContatoBean{

    Connection conexao;  //Criação de um objeto do tipo connection


    //Criação do novo contato com seus devidos gets e sets para que o Bean
    //possa realizar as opeações desejadas
    //BackBean
    Contato contato=new Contato();

    public Contato getContato() {
        return contato;
    }

    public void setContato(Contato contato) {
        this.contato = contato;
    }

/***********************************************************/

    //Criação do ManagedBean
    public void gravarContato(){

        System.out.println("Gravando contato"+contato.getNome());
        System.out.println("Gravando contato"+contato.getEndereco());
        System.out.println("Gravando contato"+contato.getCelular());
        System.out.println("Gravando contato"+contato.getTelefone());
        System.out.println("Gravando contato"+contato.getCidade());
  System.out.println("Gravando contato"+contato.getDataNascimento());
        String comando = "insert into contato(nome,telefone,celular,dataNascimento,endereco,cidade,estado) "
                + "values(?,?,?,?,?,?,?)";

        PreparedStatement p;

        try {
            p = this.conexao.prepareStatement(comando);//amarra a conexao na instrução sql;
            p.setString(1, contato.getNome());
            p.setString(2, contato.getTelefone());
            p.setString(3, contato.getCelular());

            //setDate é um sql.Date, não aceita o que vem do contato que é um util.Date
            //então é feita uma conversão para sql.Date e transformado em milisegundos(tipo long)
            p.setDate(4, new java.sql.Date(contato.getDataNascimento().getTime()));

            p.setString(5, contato.getEndereco());
            p.setString(6, contato.getCidade());
            p.setString(7, contato.getEstado());

            p.execute();
        } catch (SQLException ex) {
            System.out.println("Problemas na gravação do contato"+ex);
        }

    }


    
}

Segue o código index.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:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Agenda de Contatos</title>
    </h:head>
    <h:body>
        <h:form>

            <h:panelGrid columns="2" title="Cadastro de Contato">
                <h:outputText value="Nome: "/>
                <h:inputText value="#{contatoBean.contato.nome}"/>

                <h:outputText value="Telefone: "/>
                <h:inputText value="#{contatoBean.contato.telefone}"/>

                <h:outputText value="Celular: "/>
                <h:inputText value="#{contatoBean.contato.celular}"/>

                <h:outputText value="Nascimento: "/>
                <h:inputText value="#{contatoBean.contato.dataNascimento}">
                    <f:convertDateTime pattern="dd/MM/yyyy"/>
                </h:inputText>

                <h:outputText value="Endereço: "/>
                <h:inputText value="#{contatoBean.contato.endereco}"/>

                <h:outputText value="Cidade: "/>
                <h:inputText value="#{contatoBean.contato.cidade}"/>
                
                <h:outputText value="Estado:"/>
                <h:inputText value="#{contatoBean.contato.estado}"/>
                

                <h:commandButton value="Salvar" action="#{contatoBean.gravarContato}"/>

            </h:panelGrid>
        </h:form>
    </h:body>
</html>

E agora o erro

WARNING: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: contatoBean, classe do valor: beans.ContatoBean).
INFO: Gravando contatoRaquel Assis
INFO: Gravando contatoDecio martins
INFO: Gravando contato654321
INFO: Gravando contato123456
INFO: Gravando contatoCaçapava
INFO: Gravando contatoSun Jul 19 21:00:00 BRT 1981
SEVERE: java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        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)
Caused by: java.lang.NullPointerException
        at beans.ContatoBean.gravarContato(ContatoBean.java:49)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        ... 32 more

WARNING: #{contatoBean.gravarContato}: java.lang.NullPointerException
javax.faces.FacesException: #{contatoBean.gravarContato}: java.lang.NullPointerException
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        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)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        ... 31 more
Caused by: java.lang.NullPointerException
        at beans.ContatoBean.gravarContato(ContatoBean.java:49)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        ... 32 more

Toda a ajuda é bem vinda.

Abraços

tenta colocar na classe contato e/ou na classe contatoBean essa implementação

implements java.io.Serializable

fica assim

public class Contato implements java.io.Serializable
public class ContatoBean implements java.io.Serializable

Desculpa a pergunta, mas em que lugar do código vai esta implementação?

Na declaração das classes, sou iniciante em JSF tambem, então não sei o pq, mas as classes java, com excessão dos beans, q vão ser usadas na aplicação precisam dessa implementação

Onde mesmo vc instanciou a o objeto conexao?

Olá dev.rafael

A conexão está instanciada na linha 14 conforme o código abaixo mas não sei se está correto. Li alguns posts e parece que o erro referenciado é sobre alguma coisa que está nula mas não descobri onde.

package beans;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import modelo.Contato;

@ManagedBean
@SessionScoped
public class ContatoBean {

    Connection conexao;  //Criação de um objeto do tipo connection
    
    
    //Criação do novo contato com seus devidos gets e sets para que o Bean
    //possa realizar as opeações desejadas
    //BackBean
    Contato contato = new Contato();

    public Contato getContato() {
        return contato;
    }

    public void setContato(Contato contato) {
        this.contato = contato;
    }

    /***********************************************************/
    //Criação do ManagedBean
    public void gravarContato() {

        System.out.println("Gravando contato" + contato.getNome());
        System.out.println("Gravando contato" + contato.getEndereco());
        System.out.println("Gravando contato" + contato.getCelular());
        System.out.println("Gravando contato" + contato.getTelefone());
        System.out.println("Gravando contato" + contato.getCidade());
        System.out.println("Gravando contato" + contato.getDataNascimento());

        String comando = "insert into contato(nome,telefone,celular,dataNascimento,endereco,cidade,estado) "
                + "values(?,?,?,?,?,?,?)";

        PreparedStatement p;


        try {
            p = this.conexao.prepareStatement(comando);//amarra a conexao na instrução sql;
            p.setString(1, contato.getNome());
            p.setString(2, contato.getTelefone());
            p.setString(3, contato.getCelular());

            //setDate é um sql.Date, não aceita o que vem do contato que é um util.Date
            //então é feita uma conversão para sql.Date e transformado em milisegundos(tipo long)
            p.setDate(4, new java.sql.Date(contato.getDataNascimento().getTime()));

            p.setString(5, contato.getEndereco());
            p.setString(6, contato.getCidade());
            p.setString(7, contato.getEstado());

            p.execute();
        } catch (SQLException ex) {
            System.out.println("Problemas na gravação do contato" + ex);
        }
    }
}

Abraço

O código da linha 14 declara o atributo mas ñ cria instância nenhuma. Esse é o seu problema, o seu stack trace indica q vc está obtendo uma NullPointerException provavelmente na linha p = this.conexao.prepareStatement(comando);//amarra a conexao na instrução sql; pq o seu objeto conexao nunca foi criado. Faça isso:

Connection conexao = new FabricaConexao().fazConexao();

Show de bola, aos poucos eu vou aprendendo

Meu código ficou assim:[code]
package beans;

import dao.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import modelo.Contato;

@ManagedBean
@SessionScoped
public class ContatoBean {

// FabricaConexao conexao=new FabricaConexao();
Connection conexao = new FabricaConexao().fazConexao(); //Criação de um objeto do tipo connection

//Criação do novo contato com seus devidos gets e sets para que o Bean
//possa realizar as opeações desejadas
//BackBean
Contato contato = new Contato();

public Contato getContato() {
    return contato;
}

public void setContato(Contato contato) {
    this.contato = contato;
}

/***********************************************************/
//Criação do ManagedBean
public void gravarContato() {

    System.out.println("Gravando contato" + contato.getNome());
    System.out.println("Gravando contato" + contato.getEndereco());
    System.out.println("Gravando contato" + contato.getCelular());
    System.out.println("Gravando contato" + contato.getTelefone());
    System.out.println("Gravando contato" + contato.getCidade());
    System.out.println("Gravando contato" + contato.getDataNascimento());

    String comando = "insert into contato(nome,telefone,celular,dataNascimento,endereco,cidade,estado) "
            + "values(?,?,?,?,?,?,?)";

    PreparedStatement p;


    try {
        p = this.conexao.prepareStatement(comando);//amarra a conexao na instrução sql;
        p.setString(1, contato.getNome());
        p.setString(2, contato.getTelefone());
        p.setString(3, contato.getCelular());

        //setDate é um sql.Date, não aceita o que vem do contato que é um util.Date
        //então é feita uma conversão para sql.Date e transformado em milisegundos(tipo long)
        p.setDate(4, new java.sql.Date(contato.getDataNascimento().getTime()));

        p.setString(5, contato.getEndereco());
        p.setString(6, contato.getCidade());
        p.setString(7, contato.getEstado());

        p.execute();
    } catch (SQLException ex) {
        System.out.println("Problemas na gravação do contato" + ex);
    }
}

}
[/code]