2014-12-17 2 views
-2

JSF 1.2/Rich Faces 3.3/Tomcat 6/Java 1.6에서 응용 프로그램을 개발했습니다. 페이지에는 긴 값을 입력하기위한 텍스트 상자가 있습니다. 내가 텍스트 상자를 비워 콩에서 값을 선택하면 다음과 같다 : - JSP 페이지에서javax.faces.el.EvaluationException : null 값이 긴 경우 nullPointerException이 발생합니다.

if(this.employeeAge.toString() == "" || this.employeeAge == null ||  
    this.employeeAge == 0) // this is code line no 809 generating error 
    { System.out.println("employee age not entered"); 
    } 

조각은 다음과 같다 : -

이 아파치 톰캣으로하지만, 웹 스피어에서 작동
<h:outputText value="Employee Age" /> 
    <h:inputText value="#{employeeBean.employeeAge}" id="empAge" maxlength="3" /> 

, 다음 오류가 발생합니다.

 [12/16/14 12:22:10:641 PKT] 00000037 webapp  E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[Faces Servlet]: javax 
    .faces.FacesException: #{employeeBean.save}: java.lang.NullPointerException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:387) 
    at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55) 
    at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:324) 
    at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:299) 
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:256) 
    at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:469) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1597) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131) 
    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:388) 
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116) 
    at restricted.AuthorizationFilter.doFilter(AuthorizationFilter.java:162) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:934) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3826) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:445) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:504) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:301) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1563) 
    Caused by: 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) 
    ... 44 more 
    Caused by: java.lang.NullPointerException 
    at mtech.beans.EmployeeBean.save(EmployeeBean.java:809) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:600) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:159) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:67) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    ... 45 more 

이 오류를 방지하려면 수행해야 할 작업. 이 null 경우

답변

1
if(this.employeeAge.toString() == "" || this.employeeAge == null ||  
    this.employeeAge == 0) // this is code line no 809 generating erro 

먼저 (toString()에 대한) employeeAge 값을 사용하고 후에는 확인된다.

if에서 표현식은 순서대로 평가됩니다.

그냥 employeeAge가 null의 경우 순서

if (this.employeeAge == null || this.employeeAge.toString() == "" ||  
    this.employeeAge == 0) // this is code line no 809 generating erro 

을 변경하기 때문에 true || anything -> true.

당신이 ||이 왼쪽 표현이 true 경우 또한, 그들은 (단락, 올바른 표현은 평가되지 않습니다 첫 번째 식은 true을 반환하고 다른 식 중 하나는 계산되지 않습니다.

+0

물론 EL과는 아무런 관련이 없습니다. 식을 계산 한 후에 잘못된 코드가 호출되지만 식 자체는 다음과 같습니다. 문제가되지 않습니다. – SJuan76

+0

'this.employeeAge.toString() == ""'? – Tiny

+0

문제의 원인이 아닌 @ Tiny의 주석도 유효합니다. 객체가 평등한지 비교하기 위해'=='를 사용하면 안됩니다 (이 경우에는'this.employeeAge.toString(). length() == 0') – SJuan76

관련 문제