2011-04-28 28 views
1

我可以像這樣傳遞一個表達式作爲方法表達式參數嗎?如何用參數調用方法表達式?

<p:dataTable id="gridRPBDetails" var="rpbDetail" 
    value="#{tInputBean.detailList}" 
    selection="#{tInputBean.selectedDetails}"> 

.... 

    <p:commandButton 
     process="@this" 
     action="#{tInputBean.querySubAnggaranListImpl(rpbDetail.map['budget'])}" ... /> 

.... 

</p:datatable> 

我試過,但有例外結束:

DEBUG PhaseTracker - BEFORE PHASE INVOKE_APPLICATION 5 
Apr 28, 2011 3:22:17 PM com.sun.faces.application.ActionListenerImpl processAction 
SEVERE: java.lang.NullPointerException 
javax.faces.el.MethodNotFoundException: java.lang.NullPointerException 
     at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:104) 
     at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
     at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
     at javax.faces.component.UIData.broadcast(UIData.java:915) 
     at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630) 
     at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787) 
     at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252) 
     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:312) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.NullPointerException 
     at java.lang.Class.isAssignableFrom(Native Method) 
     at org.apache.el.util.ReflectionUtil.isAssignableFrom(ReflectionUtil.java:299) 
     at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:172) 
     at org.apache.el.parser.AstValue.invoke(AstValue.java:251) 
     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) 
     ... 25 more 
Apr 28, 2011 3:22:17 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNING: #{tInputBean.querySubAnggaranListImpl(rpbDetail.map['budget'])}: java.lang.NullPointerException 
javax.faces.FacesException: #{tInputBean.querySubAnggaranListImpl(rpbDetail.map['budget'])}: java.lang.NullPointerException 
     at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110) 
     at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
     at javax.faces.component.UIData.broadcast(UIData.java:915) 
     at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630) 
     at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787) 
     at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252) 
     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:312) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.faces.el.MethodNotFoundException: java.lang.NullPointerException 
     at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:104) 
     at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
     ... 24 more 
Caused by: java.lang.NullPointerException 
     at java.lang.Class.isAssignableFrom(Native Method) 
     at org.apache.el.util.ReflectionUtil.isAssignableFrom(ReflectionUtil.java:299) 
     at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:172) 
     at org.apache.el.parser.AstValue.invoke(AstValue.java:251) 
     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) 
     ... 25 more 
DEBUG PhaseTracker - AFTER PHASE INVOKE_APPLICATION 5 
javax.faces.FacesException: #{tInputBean.querySubAnggaranListImpl(rpbDetail.map['budget'])}: 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:118) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.faces.FacesException: #{tInputBean.querySubAnggaranListImpl(rpbDetail.map['budget'])}: java.lang.NullPointerException 
     at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110) 
     at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
     at javax.faces.component.UIData.broadcast(UIData.java:915) 
     at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630) 
     at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787) 
     at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252) 
     at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
     ... 18 more 
Caused by: javax.faces.el.MethodNotFoundException: java.lang.NullPointerException 
     at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:104) 
     at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
     ... 24 more 
Caused by: java.lang.NullPointerException 
     at java.lang.Class.isAssignableFrom(Native Method) 
     at org.apache.el.util.ReflectionUtil.isAssignableFrom(ReflectionUtil.java:299) 
     at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:172) 
     at org.apache.el.parser.AstValue.invoke(AstValue.java:251) 
     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) 
     ... 25 more 

這裏是我的操作方法(請注意,rpbDetail.map [ '預算']是一種DataTransferObject的,所以它應該適合在):

public void querySubAnggaranListImpl(DataTransferObject budget) { 
    DebugUtil.start("querySubAnggaranListImpl"); 
    String budgetId = budget.getString("id"); 

    // cari subbudgetlist berdasarkan budgetId 
    this.comboChainSubAnggaranList = ch.execute("common", "GetSubBudgetList", 
     new DataTransferObject() 
      .putString("budgetId", budgetId)) 
     .getList("result"); 
    DebugUtil.end("querySubAnggaranListImpl"); 
} 

我想這一點deperation的:action="#{tInputBean.querySubAnggaranListImpl(#{rpbDetail.map['budget']})}",並結束了與我的瀏覽器此錯誤消息:

/TInput.xhtml @ 161,40 行動=「#{tInputBean.querySubAnggaranListImpl(#{ rpbDetail.map ['budget']})}「 EL標識符(標識符 :: = Java語言標識符)的第1.19節 需要標識符[#]不是有效的Java 標識符。通過將 系統屬性 org.apache.el.parser.SKIP_IDENTIFIER_CHECK 設置爲true,可以禁用此 檢查。


如何i中的參數傳遞到像上面我的情況下該方法表達?

謝謝!

+1

有趣的問題,我想稍後嘗試重現。現在,請嘗試'rpbDetail.map.budget'。 – BalusC 2011-04-28 12:57:00

+0

@BalusC:你好,謝謝你的想法。我終於發現這是我的錯誤。它應該是rpbDetail.map.subBudget.map.budget。 rpbDetail.map.budget返回null,因此是NullPointerException。 – bertie 2011-04-29 03:28:06

+0

啊,那麼不應該拋出這種NPE。您使用的是什麼servletcontainer/EL impl? Tomcat 7.x的標準修剪,我猜? – BalusC 2011-04-29 03:29:19

回答

0

我終於發現這是我的錯誤。它應該是

rpbDetail.map.subBudget.map.budget. 

rpbDetail.map.budget返回NULL,因此NullPointerException

相關問題