Java 在EL中使用null参数调用方法的结果是传递0而不是null
我有一个POJO:Java 在EL中使用null参数调用方法的结果是传递0而不是null,java,tomcat,spring-mvc,el,Java,Tomcat,Spring Mvc,El,我有一个POJO: public class Foo { public String getValue(Integer arg0, BigDecimal arg1) {...} } 我将它作为Spring MVC的模型参数放入JSP中,并尝试使用它: <c:set var="ans" value="${foo.getValue(null, null)}"/> 而非预期 arg0 = null arg1 = null 我试着在Tomcat 7.0.40和jetty 9.0
public class Foo {
public String getValue(Integer arg0, BigDecimal arg1) {...}
}
我将它作为Spring MVC的模型参数放入JSP中,并尝试使用它:
<c:set var="ans" value="${foo.getValue(null, null)}"/>
而非预期
arg0 = null
arg1 = null
我试着在Tomcat 7.0.40和jetty 9.0.3上运行它
这是Tomcat的错误,还是EL的工作方式正确?
在EL中,如何使用空参数调用方法
更新1:
有几个来源和文档()说添加JVM属性
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
解决它
但当我设定它时,什么也没发生。我把它校准了
System.getProperty("org.apache.el.parser.COERCE_TO_ZERO")`
在运行时返回“false”
)
可能Tomcat需要更改一些其他设置才能使用此参数…据我所知,当您使用Null时,任何程序都会将Null值初始化为原语的默认值。这意味着int值将始终为0,double 0.0,boolean值将为false等等
您可以做的是,在方法开始时进行一些额外的测试并验证值是否为空,如果为空,则进行一些额外的测试。有一些东西不能让我信服
。在使用JSTL时,不能以这种方式调用方法。您可以改为访问属性${foo.value}
,相应的getter将在后台调用。此外,您不能传递参数,因为假定getter是parameterless@maVVamaldo,在EL 2.2中是可能的。具有相同的问题。在Tomcat7 catalina.properties文件和ServletContextLoader中都设置了强制为零的属性,但该属性无效。@azgolfer,这仍然是实际问题。如果您能找到一些解决方案(使用glassfish而不是Tomcat不起作用),请告诉我。Integer和BigDecimal标记为null,但不标记为0。只需Tomcat EL解释程序将其设置为0。所以在foo.getValue(…)中,我只能得到0。
System.getProperty("org.apache.el.parser.COERCE_TO_ZERO")`