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

ⅰ亾dé卋堺 提交于 2019-11-26 10:35:48

问题


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.


回答1:


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.



来源:https://stackoverflow.com/questions/5225013/how-to-set-dorg-apache-el-parser-coerce-to-zero-false-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!