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

Ste*_*eve 25 jsf tomcat el jvm-arguments managed-bean

这个问题类似于:

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

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

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

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

但是,这对我们客户的机器不起作用.是否可以在"代码内"设置/更改此JVM参数.

更新:我发现这是请求,但如果其他人有任何其他解决方法,我也想听到.

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

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

Bal*_*usC 44

您可以使用以编程方式设置系统属性System#setProperty().

System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false");
Run Code Online (Sandbox Code Playgroud)

但是,您需要确保 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
    }

}
Run Code Online (Sandbox Code Playgroud)

其注册为<listener>web.xml,或当你已经在Servlet的3.0(Tomcat的7等等),与@WebListener注解.