2012-02-13 4 views
0

웹 응용 프로그램을 사용할 때 널 포인터 예외가 발생합니다. 이 예외는 로그인 페이지에서 발생합니다. 나는 모두 사용자 이름과 패스를 입력하지만, 값 또는 표현식 #{userBean.user} 또는 #{userBean.pass}의 평가가 null을 반환하는 것으로 보입니다.null 포인터 예외 JSF

내 구성 : 아파치 톰캣 7.0.22, 인 Mojarra 2.1.6, RichFaces 여기

4.1 나는 무엇을 할 수있는 스택 트레이스

javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    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:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1824) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.NullPointerException 
    at mx.gob.sagarpa.utilidades.Database.checkUser(Database.java:61) 
    at mx.gob.sagarpa.beans.UserBean.doLogin(UserBean.java:70) 
    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:262) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    ... 24 more 

입니까?

답변

2

근본 원인에 대해 스택 트레이스의 bottomost "원인"으로 향해야합니다. 특정 경우에 다음된다 : 코드주기 연산자 .하여 액세스 중에 Database 클래스의 라인 61

Caused by: java.lang.NullPointerException 
    at mx.gob.sagarpa.utilidades.Database.checkUser(Database.java:61) 

볼이 상기 checkUser()있어서 내부 일부 객체 참조 null이다.

someObject = null; 
someObject.doSomething(); // NullPointerException! 

를 해결하려면, 당신은 nullcheck을 추가하거나 필요할 것

if (someObject != null) { 
    someObject.doSomething(); 
} else { 
    // Take alternate path? 
} 

하거나 취할 경로 null

someObject = createItSomehow(); 
someObject.doSomething(); // Okay. 

콘크리트에 따라 결코 있는지 확인하기 기능적 요구 사항은 질문에서 명확하지 않다. 하지만 이제는 적어도 NullPointerException이 발생할 수있는 이유를 이해해야합니다. 이것은 또한에 설명되어 그 javadoc (예외 포함 클래스에 대한 정보를 찾기위한 # 1 소스해야하는) : 응용 프로그램이 오브젝트가 필요한 경우에 null를 사용하려고했을 때에 throw

. 여기에는

  • null 개체의 인스턴스 메서드를 호출하는 것이 포함됩니다.
  • null 개체의 필드 액세스 또는 수정.
  • 길이가 null 인 것처럼 배열로 간주합니다.
  • 슬롯이 null 인 것처럼 액세스하거나 수정합니다.
  • null을 마치 Throwable 값처럼 던집니다.

응용 프로그램은 null 개체의 다른 불법 사용을 나타 내기 위해이 클래스의 인스턴스를 throw해야합니다.

즉,이 문제는 JSF와 정확히 관련이 없습니다. 그것은 단지 기본적인 Java입니다. 알맞은 기본 자바 서적/튜토리얼을 읽는 데 시간을 할애하는 것이 좋습니다.

+0

감사합니다. 때로는 모든 것을 잊어 버렸습니다. 사실 나는 그것이 몇 시간 전에 작동했기 때문에 놀라지 만 DB와 관련이 있다고 생각합니다. – BRabbit27