Исключение нулевого указателя JSF - PullRequest
0 голосов
/ 13 февраля 2012

Я получаю исключение нулевого указателя при использовании моего веб-приложения.Это исключение выдается на странице входа.Я ввожу и имя пользователя, и пароль, но кажется, что значение или оценка выражения #{userBean.user} или #{userBean.pass} возвращают ноль.

Моя конфигурация: Apache Tomcat 7.0.22, Mojarra 2.1.6, RichFaces4.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

Что я могу сделать?

1 Ответ

3 голосов
/ 13 февраля 2012

Вам нужно перейти к самой нижней части «Вызванной» трассировки стека для коренной причины real . В вашем конкретном случае это следующее:

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

В строке 61 класса Database внутри метода checkUser() указана некоторая ссылка на объект null, когда код обращается к нему с помощью оператора периода ..

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

Чтобы исправить это, вам нужно либо добавить нулевую проверку

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

или чтобы убедиться, что он никогда не null

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

Какой путь выбрать, зависит от конкретного функционального требования, которое не ясно из вопроса. Но теперь вы должны хотя бы понять, почему может возникнуть NullPointerException. Это также объясняется в javadoc (который должен быть источником № 1 для поиска информации о классах, включая исключения):

Выдается, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра объекта null.
  • Доступ или изменение поля объекта null.
  • Взять длину null, как если бы это был массив.
  • Доступ или изменение слотов null, как если бы это был массив.
  • Бросок null, как если бы это было значение Throwable.

Приложения должны генерировать экземпляры этого класса, чтобы указать на другое незаконное использование объекта null.

Тем не менее, эта проблема не совсем связана с JSF. Это просто базовая Java. Я бы посоветовал потратить некоторое время на изучение приличной базовой книги / учебника по Java.

...