我们在 JSF 页面中使用 h:inputText
,它绑定(bind)到 Integer
属性(因此可以接受 null
)。当 h:inputText
中没有写入值时,表单将提交 0
而不是 null
。我们正在使用 Trinidad 1.2.2 和 Tomcat 6.0.20(我们也尝试使用 Tomcat 6.0.14,因为我们了解到某些 Tomcat 版本可能会发生这种情况)。
这是怎么引起的,我该如何解决?
最佳答案
此“功能”是根据 Tomcat 6.0.16 引入的 EL 中的错误修复的结果。根据 EL specification 的第 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
类型为空字符串:JSP EL issue 184 .他们没有做太多,但这个问题至少得到了很多选票。谁知道呢……这种行为至少确实很烦人,因为它不符合直觉。
另见:
关于jsf - h :inputText which is bound to Integer property is submitting value 0 instead of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116517/