17

我们h:inputText在绑定到Integer属性的 JSF 页面中使用 a (因此可以接受null)。当 中没有写入值时h:inputText,表单提交的是 a0而不是null。我们使用的是 Trinidad 1.2.2 和 Tomcat 6.0.20(我们也尝试使用 Tomcat 6.0.14,因为我们读到某些 Tomcat 版本可能会发生这种情况)。

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

4

1 回答 1

27

这个“特性”是根据 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。他们没有做太多,但这个问题至少得到了很多选票。谁知道……这种行为至少确实很烦人,因为它不直观。

也可以看看:

于 2010-06-25T11:28:39.733 回答