我们在JSF页面中使用h:inputText
,该页面绑定到Integer
属性(因此可以接受null
)。如果h:inputText
中没有写入任何值,则表单会提交0
而不是null
。我们正在使用Trinidad 1.2.2和Tomcat 6.0.20(我们也尝试过Tomcat 6.0.14,因为我们读到这可能发生在某些Tomcat版本上)。
这是如何引起的?如何解决?
答案 0 :(得分:25)
此“功能”是EL中的错误修复的结果,它是根据Tomcat 6.0.16引入的。根据{{3}}的第1.18.3章,数字类型null
的值应该被强制为0.在Tomcat 6.0.16之前,这被“错误地”强制转换为空字符串。 / p>
毕竟,空字符串实际上比零更直观。 Apache的Tomcat人员对这个bug修正了很多抱怨,因此他们根据Tomcat 6.0.17引入了一个新的VM参数设置,这将禁用这个错误修复。
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
我顺便要求更改此规范,它应该只将空/空原始类型强制为零并且空/空非原始 {{ 1}}类型为空字符串:EL specification。他们对此并不多,但这个问题至少获得了很多选票。谁知道......这种行为至少确实令人讨厌,因为它不直观。