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

Ave*_*oes 15 jsf tomcat integer el zero

我们h:inputText在一个绑定到Integer属性的JSF页面中使用a (因此可以接受null).当没有写入的值时h:inputText,表单提交的是0代替null.我们正在使用Trinidad 1.2.2和Tomcat 6.0.20(我们也尝试过Tomcat 6.0.14,因为我们读到这可能发生在某些Tomcat版本上).

这是怎么造成的,我该如何解决?

Bal*_*usC 25

这个"功能"是EL中的错误修复的结果,它是根据Tomcat 6.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类型强制为空字符串:JSP EL issue 184.他们对此并不多,但这个问题至少获得了很多选票.谁知道......这种行为至少确实令人讨厌,因为它不直观.

也可以看看: