2011-10-07 34 views
1

我使用Tomcat7和JSF2。我用方法調用等ExpressionLanguage(EL)允許使用NULL參數調用方法嗎?

action="#{bean.method(22)}" 

action="#{bean.method(var)}" 

其中var是EL變量。

但是,如果varnull,或者我嘗試撥打#{bean.method(null)我得到一個NPE並且不調用該方法。

有沒有辦法將一個null參數傳遞給EL中的方法? 在EL中是否有null的文字?

感謝

+1

對於null,Th的literal爲null。 – EJP

回答

3

我可以重現在Tomcat 7.0.22這個問題,但不是在Glassfish 3.1.1。在NPE堆棧跟蹤暗示Apache的EL實現是錯在這裏:

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) 

它不應該叫Class#isAssinableFrom()null說法。它的javadoc也禁止。我將它作爲一個bug報告給apache.org上的Tomcat傢伙。根據EL 2.2 spec的說法,它應該被允許(因此應該跳過Class#isAssignableFrom()調用),或者作爲ELException或其中一個子類拋出。

+0

如果您在此處發佈問題網址,那將會很好。 – jFrenetic

+0

@jFrenetic:我還沒有發佈。這只是OP的建議。如果操作系統不會發布,我可能會再次閱讀EL規範,即使這個是IMO顯然是一個bug。我經歷了幾次Tomcat錯誤報告之後,Tomcat開發人員對規格說明非常嚴格。 – BalusC

0

如果可能的話(您可以訪問bean方法),您可以將您的方法從int更改爲Integer,然後在設置之前檢查null。

method(int myInteger){ 
    if(myInt == null){ 
     return; 
    } 

    this.beanInt = myInteger; 
} 
+0

這不會有幫助,因爲在調用bean方法之前引發Exception。 (更改爲「對象」也有幫助。) –

0

我在Apache 7.0.47上遇到同樣的問題。它在更新至7.0.56後消失。

所以它可能是一個錯誤,雖然我找不到任何問題跟蹤器條目。

相關問題