Erro: Definindo valor de atributo não serializável em ViewMap e java.lang.NullPointerException

Tenho um trabalho que precisa criptografar a senha cadastrada, o meu aplicativo desktop está fazendo a encriptação mas o aplicativo web está dando esse erro depois que clica em enviar:

Jul 30, 2013 6:13:47 PM javax.faces.component.UIViewRoot$ViewMap put WARNING: Definindo valor de atributo não serializável em ViewMap (chave: funcionarioController, classe do valor: controller.FuncionarioController). Jul 30, 2013 6:14:03 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute WARNING: /index.xhtml @37,191 actionListener="#{funcionarioController.inserir()}": java.lang.NullPointerException javax.el.ELException: /index.xhtml @37,191 actionListener="#{funcionarioController.inserir()}": java.lang.NullPointerException Jul 30, 2013 6:14:03 PM com.sun.faces.context.ExceptionHandlerImpl log 1100: JSF1073: javax.faces.FacesException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=, Message=/index.xhtml @37,191 actionListener="#{funcionarioController.inserir()}": java.lang.NullPointerException Jul 30, 2013 6:14:03 PM com.sun.faces.context.ExceptionHandlerImpl log 1100: /index.xhtml @37,191 actionListener="#{funcionarioController.inserir()}": java.lang.NullPointerException javax.faces.FacesException: /index.xhtml @37,191 actionListener="#{funcionarioController.inserir()}": java.lang.NullPointerException at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:818) at javax.faces.component.UICommand.broadcast(UICommand.java:300) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 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:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.NullPointerException at controller.FuncionarioController.inserir(FuncionarioController.java:43) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.el.parser.AstValue.invoke(AstValue.java:278) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) ... 29 more

O formulário fiz na index mesmo

[code]<?xml version='1.0' encoding='UTF-8' ?>

Trabalho
            <h:outputLabel value="Tel.: "/>
            <h:inputText size="20" id="telFunc" value="#{funcionarioController.funcionario.telFunc}" 
                         required="true" requiredMessage="Digite seu telefone!"/>                  
            <h:message for="telFunc"/>
            
            <h:outputLabel value="Cargo: "/>
            <h:inputText size="20" id="profissaoFunc" value="#{funcionarioController.funcionario.profissaoFunc}" 
                         required="true" requiredMessage="Digite seu cargo!"/>                  
            <h:message for="profissaoFunc"/>
              
            <h:outputLabel value="Login: "/>
            <h:inputText id="login" value="#{funcionarioController.funcionario.login}" required="true" requiredMessage="Digite seu login!"/>
            <h:message for="login"/>
            
            <h:outputLabel value="Senha: "/>
            <h:inputSecret id="senha" value="#{funcionarioController.funcionario.senha}" required="true" requiredMessage="Digite a senha!"/>
            <h:message for="senha"/>
            
        
        </h:panelGrid>
            <h:commandButton title="Salvar" style="text-align:center" value="Enviar" actionListener="#{funcionarioController.inserir()}" action="#{funcionarioController.showMessage()}"/>
         
    </h:form>
</h:body>
 <p:dialog header="Cadastrado com sucesso!" modal="true" closable="true"  
            widgetVar="confirmation" width="170">  
</p:dialog>

<p:dialog header=“Não Foi Cadastrado!” modal=“true” closable="true"
widgetVar=“falha” width=“170”>
</p:dialog>

[/code]

FuncionarioController

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package controller;

import bean.Funcionario;
import dao.FuncionarioDao;
import exception.DaoException;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;

@ManagedBean(name=“funcionarioController”)
@SessionScoped
@ViewScoped
public class FuncionarioController {
private FuncionarioDao funcionarioDao;
private Funcionario funcionario;
// private DataModel clientes;

public void novo(){
    
}

public FuncionarioController(){
    funcionario = new Funcionario();
}

public String inserir() throws DaoException{
    String resultado = "falha";
    funcionarioDao = new FuncionarioDao();
    boolean retorno = funcionarioDao.inserirFuncionarios(funcionario);
    if(retorno){
        resultado = "cadastroCliente";
        RequestContext context = RequestContext.getCurrentInstance();    
    //execute javascript  
    context.execute("confirmation.show();");
    }else{
        resultado = "cadastroCliente";
        RequestContext context = RequestContext.getCurrentInstance();  
      context.execute("falha.show();");  
    }
    return resultado;
}

public void showMessage() {  
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro", "Salvo com sucesso!");  
      
    FacesContext contexto = FacesContext.getCurrentInstance();
    contexto.addMessage(null, message);
} 

public Funcionario getFuncionario() {
return funcionario;
}

public void setFuncionario(Funcionario funcionario) {
    this.funcionario = funcionario;
}

}
[/code]

Funcionario bean

[code]package bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;

@ManagedBean(name=“FuncionarioBean”)
@SessionScoped
public class Funcionario {
private Integer numFunc;
private String nomeFunc;
private String telFunc;
private String profissaoFunc;
private String login;
private String senha;

//Métodos
public Integer getNumFunc() {
    return numFunc;
}

public void setNumFunc(Integer numFunc) {
    this.numFunc = numFunc;
}

public String getNomeFunc() {
    return nomeFunc;
}

public void setNomeFunc(String nomeFunc) {
    this.nomeFunc = nomeFunc;
}

public String getTelFunc() {
    return telFunc;
}

public void setTelFunc(String telFunc) {
    this.telFunc = telFunc;
}

public String getProfissaoFunc() {
    return profissaoFunc;
}

public void setProfissaoFunc(String profissaoFunc) {
    this.profissaoFunc = profissaoFunc;
}


public String getLogin() {
	return login;
}

public void setLogin(String login) {
	this.login = login;
}
public String getSenha() {
	return senha;
}

public void setSenha(String senha) {
	this.senha = senha;
}

}[/code]

FuncionarioDao

[code]package dao;

import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.Criptografia;

import exception.DaoException;
import util.DbUtil;
import bean.Funcionario;

public class FuncionarioDao {
private static final String EXCLUIR_FUNCIONARIO =
“delete from tbfuncionario where numFunc = ?”;

private static final String INSERIR_FUNCIONARIO =
		"insert into tbfuncionario(nomeFunc, telFunc, profissaoFunc, "+
		"login_funcionario, senha_funcionario) " +
		"values (?,?,?,?,?)";

private static final String ATUALIZAR_FUNCIONARIO =
		"update tbfuncionario set " +
		"nomeFunc = ?, " +
		"telFunc = ?, " +
		"profissaoFunc = ?, " +
		"login_funcionario = ?, " +
		"senha_funcionario = ? " +			
		"where numFunc = ? ";

private static final String VALIDAR_LOGIN_SENHA = 
	"select "+
		"count(numFunc) as total " +
	"from "+
		"tbfuncionario f "+
	"where "+
		"f.login_funcionario = ? and " +
		"f.senha_funcionario = ?";

private static final  String CONSULTA_FUNCIONARIOS =
		"select * from tbfuncionario order by numFunc";

private static final  String CONSULTA_FUNCIONARIO_ID = 
		"select * from tbfuncionario where numFunc = ?";

private static final  String CONSULTA_FUNCIONARIOS_NOME =
		"select * from tbfuncionario where nomeFunc like ? order by nomeFunc";	


public boolean getAutenticacao(String nome, String senha) throws DaoException {
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	int numReg = 0;
	boolean autenticado = false;
	try {			
		statement = conn.prepareStatement(VALIDAR_LOGIN_SENHA);
		statement.setString(1, nome);
	//	statement.setString(2, senha); //habilitar essa linha quando for acessar o sistema pela 1ª vez  e desabilitar o try e catch abaixo
		try {
			statement.setString(2, Criptografia.cripta(senha)); //Encripta a senha para poder comparar com a senha salva no BD
		} catch (NoSuchAlgorithmException e) {
		}
		result = statement.executeQuery();
		if (result.next()) {
			numReg = result.getInt("total");
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	if(numReg != 0){
		return autenticado = true;
	}else{
		return autenticado;			
	}
}		


public List<Funcionario> consultarFuncionarios() throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	List<Funcionario> listaFunc = new ArrayList<Funcionario>();
	try {
		statement = conn.prepareStatement(CONSULTA_FUNCIONARIOS);
		result = statement.executeQuery();
		while (result.next()) {
			Funcionario objFunc = new Funcionario();
			objFunc.setNumFunc(result.getInt(1));
			objFunc.setNomeFunc(result.getString(2));
			objFunc.setTelFunc(result.getString(3));
			objFunc.setProfissaoFunc(result.getString(4));
			objFunc.setLogin(result.getString(5));
			objFunc.setSenha(result.getString(6));				
			listaFunc.add(objFunc);
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return listaFunc;		
}

public Funcionario consultarFuncionarioID(int idFunc) throws DaoException{		
	Funcionario objFunc = new Funcionario();
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(CONSULTA_FUNCIONARIO_ID);
		statement.setInt(1, idFunc);
		result = statement.executeQuery();
		while (result.next()) {
			objFunc.setNumFunc(result.getInt(1));
			objFunc.setNomeFunc(result.getString(2));
			objFunc.setTelFunc(result.getString(3));
			objFunc.setProfissaoFunc(result.getString(4));
			objFunc.setLogin(result.getString(5));
			objFunc.setSenha(result.getString(6));					
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return objFunc;		
}

public List<Funcionario> consultarFuncionarios(String nome) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	List<Funcionario> listaFunc = new ArrayList<Funcionario>();
	try {
		if(nome.equals("")){
			statement = conn.prepareStatement(CONSULTA_FUNCIONARIOS);
		}else{
			statement = conn.prepareStatement(CONSULTA_FUNCIONARIOS_NOME);
			statement.setString(1, "%"+nome+"%");
		}
		result = statement.executeQuery();
		while (result.next()) {
			Funcionario objFunc = new Funcionario();
			objFunc.setNumFunc(result.getInt(1));
			objFunc.setNomeFunc(result.getString(2));
			objFunc.setTelFunc(result.getString(3));
			objFunc.setProfissaoFunc(result.getString(4));
			objFunc.setLogin(result.getString(5));
			objFunc.setSenha(result.getString(6));
			listaFunc.add(objFunc);
		}
	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return listaFunc;		
}	

public boolean inserirFuncionarios(Funcionario obj) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	
	try {
		statement = conn.prepareStatement(INSERIR_FUNCIONARIO);
		statement.setString(1, obj.getNomeFunc());
		statement.setString(2, obj.getTelFunc());
		statement.setString(3, obj.getProfissaoFunc());
		statement.setString(4, obj.getLogin());
		try {
			statement.setString(5, Criptografia.cripta(obj.getSenha())); //criptografando a senha
		} catch (NoSuchAlgorithmException e) {
		}			

	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
            return true;
    }

public boolean atualizarFuncionario(Funcionario objFunc) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(ATUALIZAR_FUNCIONARIO);
		statement.setString(1, objFunc.getNomeFunc());
		statement.setString(2, objFunc.getTelFunc());
		statement.setString(3, objFunc.getProfissaoFunc());
		statement.setString(4, objFunc.getLogin());
		try {
			statement.setString(5, Criptografia.cripta(objFunc.getSenha())); //criptografando a senha	
		} catch (NoSuchAlgorithmException e) {
		} 	
		statement.setInt(6, objFunc.getNumFunc());
		statement.executeUpdate();

	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return true;		
}


public boolean excluirFuncionarios(int idFuncioanrio) throws DaoException{		
	Connection conn = DbUtil.getConnection();
	PreparedStatement statement = null;
	ResultSet result = null;
	try {
		statement = conn.prepareStatement(EXCLUIR_FUNCIONARIO);
		statement.setInt(1, idFuncioanrio);
		statement.executeUpdate();

	} catch (SQLException e) {
		throw new DaoException(e);
	} finally {
		DbUtil.close(conn, statement, result);
	}
	return true;		
}

}[/code]