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

0 respostas
K
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
<?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://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Trabalho</title>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="3" style="text-align:left">
                <h:outputLabel value="Nome: "/>
                <h:inputText title="Digite seu nome completo" size="45" id="nomeFunc" value="#{funcionarioController.funcionario.nomeFunc}" 
                            required="true" requiredMessage="Digite seu nome!"/>
                <h:message for="nomeFunc"/>
                
                <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>
    
</html>
FuncionarioController
/*
 * 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<ClienteDent> 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;
    }
 
 
}
Funcionario bean
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;
	}
	
}
FuncionarioDao
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;		
	}
}
Criado 30 de julho de 2013
Respostas 0
Participantes 1