Login com JSF + Primefaces + Hibernate

5 respostas
jsfprimefaceshibernatejava
D

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

5 Respostas

C

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.

D

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 <a href="http://hibernate.sourceforge.net/">http://hibernate.sourceforge.net/</a>. Use namespace <a href="http://www.hibernate.org/dtd/">http://www.hibernate.org/dtd/</a> 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)
C

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

D

Isso mesmo, essa linha

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

C

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.

Criado 24 de agosto de 2016
Ultima resposta 30 de ago. de 2016
Respostas 5
Participantes 2