jsf:绑定到UI中的inputtext的整数属性在提交时设置为零

cha*_*ged 9 jsf form-submit

我将bean绑定到jsp页面中的inputtext UI元素的整数属性.

最初在渲染它们时,此整数属性的默认值为null.

现在,当我在不更改此inputtext字段的情况下提交表单时,即使ui文本字段为空,此字段也会在bean中设置为整数值零.

因为我想跟踪字段的更改并仅更新配置文件中更改的那些字段,但这给我带来了问题,因为它导致对所有整数字段的更新.

我正在使用jsf 1.2

Bal*_*usC 18

然而,这个问题特定于Tomcat的EL实现(例如Glassfish,不会暴露这种愚蠢的行为).在Tomcat 6.0.16之前,它曾经"直观地预期"工作.然后他们发现它实际上违反了文字 EL规范并修复了它.经过大量的批评后,他们从6.0.17及以上开始进行配置.您可以通过添加以下VM参数将其关闭:

-Dorg.apache.el.parser.COERCE_TO_ZERO=false
Run Code Online (Sandbox Code Playgroud)

这是IMO比攻击getter/setter更好.你不想像那样污染你的模型.

相关问题:

  • 我也不想污染我的模型.但是我曾经使用COERCE_TO_ZERO,并且当他们在下一个临时环境中部署时,集成人员很快忘记设置它,导致更多的浪费,而不是代码中的修复. (3认同)

mer*_*ike 9

JSF EL规范规定在分配数字类型的属性之前将null转换为0.(参见强制规则章节).一个问题已经提交关于这一点,但通过规范人们被忽略.

没有真正漂亮的解决方案.最简单的方法是在setter中将0转换回null,但假定0永远不是有效输入.其他替代方法包括让setter和getter接收/返回非数字类型(如String),并在setter/getter中执行到/从Integer的转换.但是,这意味着您将在JSF生命周期中检测到非数字输入,因此您还需要一个额外的验证器/转换器来处理它.

编辑:的Websphere 7.0.0.11不强迫null0.