How to set -Dorg.apache.el.parser.COERCE_TO_ZERO=false programmatically

el, jsf, jvm-arguments, managed-bean, tomcat

Solution

You can set the system properties programmatically using `System#setProperty()`.

System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false");

However, you need to ensure that this is been set before JSF/EL ever get initialized. Best place would be a `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
    }

}

Register it as `<listener>` in `web.xml`, or when you're already on Servlet 3.0 (Tomcat 7 and so), with `@WebListener` annotation.

Problem

This question is similar to: jsf: integer property binded to a inputtext in UI is set to zero on submit but I am not completely satisfied with the solution. The contexts is the same: I have a web form requiring an Integer value. If the textbox is left empty, I want my Integer field to be 'null' but instead the EL Parser automatically sets my id field to '0'. I can fix the problem by setting a JVM Parameter in my local Tomcat VM: -Dorg.apache.el.parser.COERCE_TO_ZERO=false However, this will not work for our client's machine. Is it possible to set/change this JVM parameter "in-code". Update: I've found that this is being requested but if anyone else has any other workaround, I would like to hear that too. https://issues.apache.org/bugzilla/show_bug.cgi?id=48813 Update 2: I can't change the value back from a '0' to a 'null' because my application should treat '0' as an actual id. So I need to know at runtime whether the id textbox was left empty or not.

Original source

Related problems