一尘不染

h:inputText绑定到Integer属性正在提交值0而不是null

tomcat

我们h:inputText在绑定到Integer属性的JSF页面中使用,因此可以接受null。如果没有写入任何值h:inputText,则表单将提交0而不是null。我们正在使用特立尼达1.2.2和Tomcat
6.0.20(我们还尝试使用Tomcat 6.0.14,因为我们读到某些Tomcat版本可能会发生这种情况)。

这是怎么引起的,我该如何解决?


阅读 298

收藏
2020-06-16

共1个答案

一尘不染

此“功能”是EL中的一个错误修正的结果,该错误修正是根据Tomcat6.0.16引入的。根据EL规范的1.18.3章,null应将数字类型的值强制为0。在Tomcat 6.0.16之前,“不正确”将其强制为空字符串。

毕竟,空字符串实际上比零更直观。Apache的Tomcat员工对此错误修复有很多抱怨,因此他们按照Tomcat
6.0.17引入了VM参数形式的新配置设置,此设置将禁用此错误修复。

-Dorg.apache.el.parser.COERCE_TO_ZERO = false

顺便说一句,我已要求对此规范进行更改,以使其只能将空/空 基本 类型强制为零,而将空/空 非基本
java.lang.Number类型强制为空字符串:JSPEL问题184。他们对此没有多大兴趣,但至少该题获得了很多选票。谁知道…这种行为至少确实很烦人,因为它是非直觉的。

2020-06-16