jsf - h :inputText which is bound to Integer property is submitting value 0 instead of null

标签 jsf tomcat integer el zero

我们在 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/

相关文章:

javascript - 如何打印出一 block 矩形重复数字?

jsf - 如何在应用程序中使用新的@ClientWindowScoped注释?

Java:如何从 JSP JSF 页面生成 PDF 文件?

jsf - PrimeFaces 3.x 中的 UTF-8

java - 如何表示整数的三角形?

c - 有符号整数的未定义行为和 Apple 安全编码指南

javascript - setStyleClass 方法覆盖已经定义的 styleClass

apache - 如何通过 Apache 在 URL 中隐藏应用程序名称?

java.lang.IllegalArgumentException : Illegal view ID in JSF 异常

Java/MySQL : Inserting row into table from Java Web Application (TomCat v7. 0)