Login com JSF + Primefaces + Hibernate

Sou iniciante em java estou Tentando fazer um login simples sem permissões de administrador, O colaborador (No caso seria o usuario) entra no sistema com seu nome e senha e se passar pelas verificações redireciona para o menu. Fiz o método controleLogin e está dando erro, porém não sei o que possa ser.

Segue o bean com o métódo do login

@ManagedBean(name = “controladorColaboradores”)
@SessionScoped
public class ControladorColaboradores implements Serializable{

private RepositorioGenerico<Colaboradores> repositorioColaboradores = null;
private Colaboradores SelectedColab;

public ControladorColaboradores() {
    this.repositorioColaboradores = new RepositorioColaboradoresImplemDB();
}

public String inserirColaboradores(Colaboradores c) {

    Colaboradores existe = this.recuperaColaboradores(c.getCodigo());
    if (existe == null) {

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("O código já existe, insira um código diferente!"));

    } else {

        this.repositorioColaboradores.inserir(c);

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Cadastro efetuado com sucesso!"));

        return "menu.xhtml";
    }
    return null;
}

public String alterarColaboradores(Colaboradores c) {
    FacesContext.getCurrentInstance().addMessage(null,
            new FacesMessage("Sucesso", "O Colaboradores foi alterado com sucesso!!"));

    this.repositorioColaboradores.alterar(c);

    return "index.xhtml";
}

public Colaboradores recuperaColaboradores(int codigo) {
    return this.repositorioColaboradores.recuperar(codigo);
}

public void deletarColaboradores(Colaboradores c) {
    this.repositorioColaboradores.excluir(c);
}

public List<Colaboradores> recuperarTodosColaboradores() {
    return this.repositorioColaboradores.recuperarTodos();
}

public RepositorioGenerico<Colaboradores> getRepositorioColaboradores() {
    return repositorioColaboradores;
}

public void setRepositorioColaboradores(RepositorioGenerico<Colaboradores> repositorioColaboradores) {
    this.repositorioColaboradores = repositorioColaboradores;
}

public Colaboradores getSelectedColab() {
    return SelectedColab;
}

public void setSelectedColab(Colaboradores SelectedColab) {
    this.SelectedColab = SelectedColab;
}

public String controleLogin(Colaboradores c) {

    List<Colaboradores> listaColaborador = new RepositorioColaboradoresImplemDB().recuperarTodos();
    for (int i = 0; i < listaColaborador.size(); i++) {
        if (listaColaborador.get(i).getNome().equals(c.getNome()) && listaColaborador.get(i).getSenha().equals(c.getSenha())) {
            return "menu.xhtml";
        } else {
            FacesMessage msg = new FacesMessage("Usuário ou senha inválido!");
                FacesContext.getCurrentInstance().addMessage("ERRO", msg);
            return "login.xhtml";
        }

    }

    return null;
}

Segue o login.xhtml

<h:body>
<h:form id=“formLogin”>
<p:messages id=“messages” />

	<div class="login">
                <h:outputLabel for="username" />
                <p:inputText id="username"  placeholder="nome" value="#{construtorColaboradores.nome}" required="true" 
                             requiredMessage="O Nome deve ser preenchido." /><br/>
                
                <h:outputLabel for="password"  />
                <p:password id="password" placeholder="senha" value="#{construtorColaboradores.senha}" required="true" 
                            requiredMessage="A senha deve ser preenchida." /><br/>
                
                
                <p:commandButton value="Entrar" ajax="false"  action="#{controladorColaboradores.controleLogin(colaboladores)}"  />
	</div>

</h:form>

Segue o erro

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
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.faces.FacesException: #{controladorColaboradores.controleLogin©}: 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:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
… 28 more
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
… 32 more
Caused by: java.lang.NullPointerException
at br.day.Controladores.ControladorColaboradores.controleLogin(ControladorColaboradores.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.el.parser.AstValue.invoke(AstValue.java:245)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:277)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
… 33 more

Vou chutar que a linha 99 seja uma destas:

for (int i = 0; i < listaColaborador.size(); i++) {
    if (listaColaborador.get(i).getNome().equals(c.getNome()) && listaColaborador.get(i).getSenha().equals(c.getSenha())) {

Vária possibilidades de NPE:

  • listaColaborador.size
  • getNome().equals
  • getSenha().equals
  • c.getNome

Faça um debug parando antes da linha 99 e verifique o que está nulo.

public String controleLogin(Colaboradores c) {

    System.out.println("Parametro: Nome: " +c.getNome() + ", senha: " + c.getSenha());
    
          List<Colaboradores> listaColaborador = new RepositorioColaboradoresImplemDB().recuperarTodos();

       for (Iterator <Colaboradores> it = listaColaborador.iterator(); it.hasNext();) {
        Colaboradores colaborador = it.next();
        if (colaborador.getNome().equals(c.getNome()) && colaborador.getSenha().equals(c.getSenha())) {
            System.out.println("Nome: " +colaborador.getNome() + ", senha: " + colaborador.getSenha());
            
            return "menu.xhtml";
        } else {
            FacesMessage msg = new FacesMessage("Colaborador ou senha inválido!");
            FacesContext.getCurrentInstance().addMessage("ERRO", msg);
            return "login.xhtml";
        }
    }

    return "login.xhtml";
}

Fiz os seguintes testes como você vê acima para checar os parametros, está comparando e listando e pelo que parece deu tudo ok, porém quando faço na tela de login dá o NullPointerException, aí fiquei sem entender

run:
Parametro: Nome: camila, senha: 111
ago 29, 2016 5:25:20 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
ago 29, 2016 5:25:20 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.1.Final}
ago 29, 2016 5:25:20 PM org.hibernate.cfg.Environment
INFO: HHH000206: hibernate.properties not found
ago 29, 2016 5:25:20 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
ago 29, 2016 5:25:20 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
ago 29, 2016 5:25:20 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
ago 29, 2016 5:25:20 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
ago 29, 2016 5:25:20 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
ago 29, 2016 5:25:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)
ago 29, 2016 5:25:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/dbAtendimento?zeroDateTimeBehavior=convertToNull]
ago 29, 2016 5:25:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=root, password=****}
ago 29, 2016 5:25:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000006: Autocommit mode: false
ago 29, 2016 5:25:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
ago 29, 2016 5:25:23 PM org.hibernate.dialect.Dialect
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
ago 29, 2016 5:25:23 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
ago 29, 2016 5:25:23 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory
INFO: HHH000397: Using ASTQueryTranslatorFactory
Nome: camila, senha: 111
menu.xhtml
BUILD STOPPED (total time: 3 minutes 2 seconds)

Abaixo segue o trecho do erro depois de fazer o login, sem ser no teste na página jsf mesmo

29-Aug-2016 17:27:28.132 1100 [http-nio-8084-exec-77] com.sun.faces.context.ExceptionHandlerImpl.log JSF1073: javax.faces.FacesException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=, Message=#{controladorColaboradores.controleLogin©}: java.lang.NullPointerException
29-Aug-2016 17:27:28.133 1100 [http-nio-8084-exec-77] com.sun.faces.context.ExceptionHandlerImpl.log #{controladorColaboradores.controleLogin©}: java.lang.NullPointerException
javax.faces.FacesException: #{controladorColaboradores.controleLogin©}: java.lang.NullPointerException
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89)
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:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
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.faces.FacesException: #{controladorColaboradores.controleLogin©}: 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:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
… 28 more
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
… 32 more
Caused by: java.lang.NullPointerException
at br.day.Controladores.ControladorColaboradores.controleLogin(ControladorColaboradores.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.el.parser.AstValue.invoke(AstValue.java:245)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:277)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)

Qual a linha 106 que deve ser a 99 antes das modificações?

Isso mesmo, essa linha

if (colaborador.getNome().equals(c.getNome()) && colaborador.getSenha().equals(c.getSenha())) {

Ok, então o resultado desta linha está saindo:

O que indica que o problema é no retorno do banco. Inverta estas duas linhas de posição:

Mas seria muito mais fácil apenas debugar a aplicação, saídas de console ajudam mais quando quer apenas acompanhar os passos da execução.