这个问题类似于:
jsf: integer property binded to a inputtext in UI is set to zero on submit
但我对解决方案并不完全满意。上下文是相同的:我有一个需要Integer值的Web表单。如果文本框留空,我希望我的整数字段为'null',而EL解析器会自动将我的id字段设置为'0'。
我可以通过在本地Tomcat VM中设置JVM参数来解决问题:
-Dorg.apache.el.parser.COERCE_TO_ZERO =假
但是,这对我们客户的机器不起作用。是否可以在“代码中”设置/更改此JVM参数。
更新:我发现这是请求,但如果其他人有任何其他解决方法,我也想听到。
https://issues.apache.org/bugzilla/show_bug.cgi?id=48813
更新2:我无法将值从“0”更改为“null”,因为我的应用程序应将“0”视为实际ID。所以我需要在运行时知道id文本框是否为空。
答案 0 :(得分:44)
您可以使用System#setProperty()
以编程方式设置系统属性。
System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false");
但是,您需要确保在 JSF / EL初始化之前已将其设置为。最好的地方是ServletContextListener
。
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// NOOP
}
}
在<listener>
中注册为web.xml
,或者当您已经使用@WebListener
注释时已经在Servlet 3.0(Tomcat 7等)上注册。