我有一个bean,其中的整数属性绑定到jsp页面上的inputtext UI元素。
最初渲染时,这些整数属性的默认值为null。
现在,当我提交表单而不更改此inputtext字段时,尽管ui文本字段为空,但此字段将设置为整数值零。
由于我想跟踪字段的更改并仅更新那些在配置文件中已更改的字段,但是这给我带来了问题,因为它会导致所有整数字段都被更新。
我正在使用jsf 1.2
我有一个bean,其中的整数属性绑定到jsp页面上的inputtext UI元素。
最初渲染时,这些整数属性的默认值为null。
现在,当我提交表单而不更改此inputtext字段时,尽管ui文本字段为空,但此字段将设置为整数值零。
由于我想跟踪字段的更改并仅更新那些在配置文件中已更改的字段,但是这给我带来了问题,因为它会导致所有整数字段都被更新。
我正在使用jsf 1.2
然而,这个问题只针对Tomcat的EL实现(例如,Glassfish就没有这种愚蠢的行为)。在Tomcat 6.0.16之前,它可以按照直觉地正常工作。但是,随后发现它实际上违反了EL规范,并进行了修复。在经过大量批评后,从6.0.17版本开始,他们将其设置为可配置项。您可以通过添加以下VM参数来关闭它:
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
我认为这比侵入getter/setter更好。你不想那样污染你的模型。
null
强制转换为0
。请参考BalusC的完整回答。
他说你可以将系统属性org.apache.el.parser.COERCE_TO_ZERO
设置为false
,但你也可以编写一个ServletContextListener
,在Web应用程序启动时设置它。
在IBM支持网站上找到了链接,供Websphere用户使用。
基本上有以下步骤:
您可以使用管理控制台设置org.apache.el.parser.COERCE_TO_ZERO属性,方法如下:
展开Servers,选择WebSphere应用服务器,然后从列表中单击适当的服务器。
在服务器基础结构下,展开Java和进程管理>单击进程定义。
在其他属性下,单击Java虚拟机。
在其他属性下,单击自定义属性。
单击新建并添加org.apache.el.parser.COERCE_TO_ZERO属性,如果您不想将null值强制转换为零,则该属性的值为false。
单击保存以保存更改并重新启动WebSphere应用程序服务器,以确保更改生效。默认值:true