一尘不染

如何以编程方式设置-Dorg.apache.el.parser.COERCE_TO_ZERO = false

tomcat

这个问题类似于:

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

但是我对解决方案并不完全满意。上下文是相同的:我有一个Web表单,需要一个Integer值。如果文本框为空,我希望我的Integer字段为“null”,但是EL Parser会自动将我的id字段设置为“ 0”。

我可以通过在本地Tomcat VM中设置JVM参数来解决此问题:

-Dorg.apache.el.parser.COERCE_TO_ZERO = false

但是,这不适用于我们客户的计算机。是否可以设置/更改此JVM参数“ in-code”。

更新: 我发现有人要求这样做,但是如果其他人有其他解决方法,我也想听听。

https://issues.apache.org/bugzilla/show_bug.cgi?id=48813

更新2: 我无法将值从“ 0”改回“ null”,因为我的应用程序应将“ 0”视为实际ID。因此,我需要在运行时知道id文本框是否为空。


阅读 341

收藏
2020-06-16

共1个答案

一尘不染

您可以使用编程设置系统属性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
    }

}

使用或在已经使用Servlet 3.0(Tomcat7等)时将其注册为<listener>中的注释。web.xml``@WebListener

2020-06-16