ExpressionLanguage (EL) 是否允许使用 NULL 参数调用方法?

发布于 2024-12-09 06:42:13 字数 400 浏览 1 评论 0原文

我使用 Tomcat7 和 JSF2。 方法调用

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

我使用类似or 的

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

,其中 var 是 EL 变量。

但是,如果 varnull,或者我尝试调用 #{bean.method(null),我会得到一个 NPE,并且该方法不是叫。

有没有办法将 null 参数传递给 EL 中的方法? EL 中有 null 的文字吗?

谢谢

I use Tomcat7 with JSF2. I use method invocations like

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

or

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

where var is an EL variable.

However, if var is null, or i try to call #{bean.method(null) i get an NPE and the method is not called.

Is there any way to pass a null argument to a method in EL?
Is there a literal for null in EL?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

伤感在游骋 2024-12-16 06:42:13

我可以在 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< /a> 也禁止这样做。我会将其作为错误报告给 apache.org 上的 Tomcat 人员。根据 EL 2.2 规范 的规定,应该允许(因此 Class#isAssignableFrom() 调用应该被跳过),或者作为 ELException 或其子类之一。

I can reproduce this issue on Tomcat 7.0.22, but not on Glassfish 3.1.1. The NPE stacktrace hints that the Apache EL implementation is wrong here:

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)

It shouldn't have called Class#isAssinableFrom() with a null argument. Its javadoc also forbids that. I'd report it as a bug to the Tomcat guys over there at apache.org. Depending on what the EL 2.2 spec says, it should either been allowed (and thus the Class#isAssignableFrom() call should have been skipped), or been thrown as an ELException or one of its subclasses.

一个人的旅程 2024-12-16 06:42:13

如果可能(您可以访问 bean 方法),您可以将方法从 int 更改为 Integer,然后在设置之前检查是否为 null。

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

    this.beanInt = myInteger;
}

If possible (you have access to the bean method), you could change your method from int to Integer and then do a check for null before setting it.

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

    this.beanInt = myInteger;
}
情徒 2024-12-16 06:42:13

我在 Apache 7.0.47 上遇到了同样的问题。更新到 7.0.56 后它消失了。

所以这可能是一个错误,尽管我找不到任何问题跟踪器条目。

I had the same issue on Apache 7.0.47. It disappeared after a update to 7.0.56.

So it probably was a bug, although I couldn't find any issue tracker entry.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文