我们h:inputText
在绑定到Integer
属性的 JSF 页面中使用 a (因此可以接受null
)。当 中没有写入值时h:inputText
,表单提交的是 a0
而不是null
。我们使用的是 Trinidad 1.2.2 和 Tomcat 6.0.20(我们也尝试使用 Tomcat 6.0.14,因为我们读到某些 Tomcat 版本可能会发生这种情况)。
这是如何引起的,我该如何解决?
这个“特性”是根据 Tomcat 6.0.16 引入的 EL 中的错误修复的结果。根据EL 规范的第 1.18.3 章,应该将数字类型的值null
强制为 0。在 Tomcat 6.0.16 之前,这被“错误地”强制为空字符串。
毕竟,空字符串实际上比零更直观。Apache 的 Tomcat 人员对这个 bug 修复有很多抱怨,所以他们根据 Tomcat 6.0.17 引入了一个新的配置设置,以 VM 参数的风格,这将禁用这个 bug 修复。
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
顺便说一句,我请求更改此规范,它应该只将空/null原始类型强制为零,并将空/null非原始 java.lang.Number
类型强制为空字符串:JSP EL issue 184。他们没有做太多,但这个问题至少得到了很多选票。谁知道……这种行为至少确实很烦人,因为它不直观。