我将 Tomcat7 与 JSF2 一起使用。我使用像
这样的方法调用 action="#{bean.method(22)}"
或
action="#{bean.method(var)}"
其中 var
是一个 EL 变量。
但是,如果 var
是 null
,或者我尝试调用 #{bean.method(null)
我得到一个 NPE 和方法未被调用。
有什么方法可以将 null
参数传递给 EL 中的方法吗?
EL 中是否有 null
的文字?
谢谢
最佳答案
我可以在 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也禁止这样做。我会将它作为错误报告给 apache.org 上的 Tomcat 人员。取决于什么 EL 2.2 spec说,它应该被允许(因此应该跳过 Class#isAssignableFrom()
调用),或者作为 ELException
抛出或其子类之一。
关于java - ExpressionLanguage (EL) 是否允许使用 NULL 参数调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7693508/