在EL中使用空参数调用方法最终传递0而不是null

vad*_*shb 8 java tomcat el spring-mvc

我有一个POJO:

public class Foo {
    public String getValue(Integer arg0, BigDecimal arg1) {...}
}
Run Code Online (Sandbox Code Playgroud)

我将它作为Spring MVC的模型参数放入JSP中,并尝试使用它:

<c:set var="ans" value="${foo.getValue(null, null)}"/>
Run Code Online (Sandbox Code Playgroud)

但在getValue方法上

arg0 = 0
arg1 = 0
Run Code Online (Sandbox Code Playgroud)

而不是预期的

arg0 = null
arg1 = null
Run Code Online (Sandbox Code Playgroud)

我试图在Tomcat 7.0.40和jetty 9.0.3上运行它

它是一些Tomcat bug,还是EL工作的正确方式?如何在EL中调用带有null参数的方法?

更新1: 几个来源和文档(http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html)说添加JVM属性

-Dorg.apache.el.parser.COERCE_TO_ZERO=false
Run Code Online (Sandbox Code Playgroud)

解决它.

但是当我设定它时,没有任何事情发生.我把它设置正确

System.getProperty("org.apache.el.parser.COERCE_TO_ZERO")` 
Run Code Online (Sandbox Code Playgroud)

"false"在运行时返回)

可能是Tomcat需要一些其他设置来改变使用这个参数...

mih*_*908 -1

据我所知,当您使用 Null 时,任何程序都会将 Null 值初始化为基元的默认值。这意味着 int 值将始终为 0、double 0.0、boolean 将为 false 等。

您可以做的是进行一些额外的测试并验证方法开头的值是否为空,如果是,则进行一些额外的测试。