Problema Login JSF: NullPointer

4 respostas
tati.mat.moreira

Olá pessoal,

estou recebendo nullPointer e não estou conseguindo consertar o meu código.

DAO:
public boolean isValidLoginAndPassword(String loginEmail, String password){
		boolean valid; 
		Session ses = session;
		Query query = ses.createQuery("from UserLogin usr where usr.loginEmail = :le and usr.password = :pw");
		query.setString("le", loginEmail);
		query.setString("pw",  password);
		UserLogin usr = (UserLogin) query.uniqueResult();
		valid = (usr != null); 
		ses.getTransaction().commit();
		ses.close();
		
		return valid; 
	}
MB:
public String doLogin() throws Exception{
        boolean logado = false;
                
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        
        System.out.println("emailLong e senha validos: " + userLoginDao.isValidLoginAndPassword(loginEmail, TransformaStringMD5.md5(senha)));
        
        logado = userLoginDao.isValidLoginAndPassword(userLogin.getLoginEmail(), TransformaStringMD5.md5(userLogin.getPassword()));

        System.out.println("doLogin >>>>>> " + senha);	
        
        if(logado){
            session.setAttribute("user", logado);
            rp.sendRedirect("http://localhost:8080/sis/index.faces");
            return "loginSucesso";
        }else{
            session.setAttribute("user", null);
            session.removeAttribute("user");
            rp.sendRedirect("http://localhost:8080/sis/login.faces");
            return "goLogin";
        }
JSP:
<legend>Login</legend>
		<h:panelGrid columns="2">
					<h:outputText id="loginLabel" value="Login" styleClass="rotulos" />
					<h:inputText id="login" value="#{userLoginFace.loginEmail}" required="true" styleClass="edit" />
					
					<h:outputText id="loginInput" value="Senha" styleClass="rotulos" />
					<h:inputSecret id="senha" required="true" value="#{userLoginFace.senha}" styleClass="edit" />
					
					<h:commandButton id="botao" value="Entrar" action="#{userLoginFace.doLogin}" />
					<h:message for="login" />
					<h:message for="senha" />
		</h:panelGrid>
Erro:
Mudando login para: admin ERROR - An exception occurred javax.faces.FacesException: Error calling action method of component with id j_id_jsp_832628529_1:botao at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72) at javax.faces.component.UICommand.broadcast(UICommand.java:143) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296) at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253) at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466) at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32) at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:151) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.com.sis.filter.AuthFilter.doFilter(AuthFilter.java:27) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.com.sis.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:22) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) Caused by: javax.faces.el.EvaluationException: org.apache.jasper.el.JspELException: /login.jsp(31,85) '#{userLoginFace.doLogin}' java.lang.NullPointerException at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:82) at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:57) ... 33 more Caused by: org.apache.jasper.el.JspELException: /login.jsp(31,85) '#{userLoginFace.doLogin}' java.lang.NullPointerException at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:77) at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:78) ... 34 more Caused by: java.lang.NullPointerException at br.com.sis.dao.UserLoginDao.isValidLoginAndPassword(UserLoginDao.java:28) at br.com.sis.faces.UserLoginFace.doLogin(UserLoginFace.java:80) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.el.parser.AstValue.invoke(AstValue.java:172) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) ... 35 more
O método isValidLoginAndPassword funciona, pois o seguinte teste retorna true:
Configuration configuration = new AnnotationConfiguration();
		configuration.configure();
		SessionFactory sf = configuration.buildSessionFactory();
		
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();

		UserLoginDao dao = new UserLoginDao(session);
		
		System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>> " + dao.isValidLoginAndPassword("admin", "123456"));

E agora?

4 Respostas

rdgms

Amigo… tenta isso com

<h:form>
tati.mat.moreira
Desculpe, coloquei só a parte relevante, já está dentro do form:
<f:view>
	<h:form>
	<fieldset>
        <legend>Login</legend>
		<h:panelGrid columns="2">
					<h:outputText id="loginLabel" value="Login" styleClass="rotulos" />
					<h:inputText id="login" value="#{userLoginFace.loginEmail}" required="true" styleClass="edit" />
					
					<h:outputText id="loginInput" value="Senha" styleClass="rotulos" />
					<h:inputSecret id="senha" required="true" value="#{userLoginFace.senha}" styleClass="edit" />
					
					<h:commandButton id="botao" value="Entrar" action="#{userLoginFace.doLogin}" />
					<h:message for="login" />
					<h:message for="senha" />
		</h:panelGrid>
	
		</fieldset>
	</h:form>

</f:view>
Javabuntu

Primeiramente trabalhando com JSF você não deveria lidar diratamente com HttpSession, use os recursos do framework.

seu erro está aqui método isValidLoginAndPassword da classe UserLoginDao :

Caused by: java.lang.NullPointerException
at br.com.sis.dao.UserLoginDao.isValidLoginAndPassword(UserLoginDao.java:2
at br.com.sis.faces.UserLoginFace.doLogin(UserLoginFace.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

com esse log que colocou não deu pra ver o número da linha de código do erro, mas verifique se o seu método abaixo e veja se a session não está null

public boolean isValidLoginAndPassword(String loginEmail, String password){  
        boolean valid;   
         // Verifique se este session não está null
       Session ses = session;  
       Query query = ses.createQuery("from UserLogin usr where usr.loginEmail = :le and usr.password = :pw");  
       query.setString("le", loginEmail);  
     ...

faça um debug pra achar o ponto, tem algum null ai.

[edit] Na sua classe DAO, qual é a linha de código 28? vê ai no seu editor nessa linha que está dando o NullPointer [/edit]

Kamikaze

Ola gatinha, tente colocar o codigo dentro de um

<h:form>

ficando

<h:form>
<h:panelGrid columns="2">   
                    <h:outputText id="loginLabel" value="Login" styleClass="rotulos" />   
                    <h:inputText id="login" value="#{userLoginFace.loginEmail}" required="true" styleClass="edit" />   
                       
                    <h:outputText id="loginInput" value="Senha" styleClass="rotulos" />   
                    <h:inputSecret id="senha" required="true" value="#{userLoginFace.senha}" styleClass="edit" />   
                       
                    <h:commandButton id="botao" value="Entrar" action="#{userLoginFace.doLogin}" />   
                    <h:message for="login" />   
                    <h:message for="senha" />   
        </h:panelGrid>  

</h:form>
Criado 6 de fevereiro de 2009
Ultima resposta 6 de fev. de 2009
Respostas 4
Participantes 4