Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何通过编程方式将-Dorg.apache.el.parser.concure\u设置为\u ZERO=false_Jsf_Tomcat_El_Jvm Arguments_Managed Bean - Fatal编程技术网

Jsf 如何通过编程方式将-Dorg.apache.el.parser.concure\u设置为\u ZERO=false

Jsf 如何通过编程方式将-Dorg.apache.el.parser.concure\u设置为\u ZERO=false,jsf,tomcat,el,jvm-arguments,managed-bean,Jsf,Tomcat,El,Jvm Arguments,Managed Bean,这个问题类似于: 但我对解决方案并不完全满意。上下文是一样的:我有一个web表单需要一个整数值。如果文本框为空,我希望我的整数字段为“null”,但EL解析器会自动将我的id字段设置为“0” 我可以通过在本地Tomcat VM中设置JVM参数来解决此问题: -Dorg.apache.el.parser.pressure\u TO\u ZERO=false 但是,这对我们客户的机器不起作用。是否可以“在代码中”设置/更改此JVM参数 更新:我发现有人要求这样做,但如果其他人有任何其他解决方法,我

这个问题类似于:

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

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

-Dorg.apache.el.parser.pressure\u TO\u ZERO=false

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

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


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

您可以使用编程方式设置系统属性

然而,您需要确保在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
    }

}

web.xml
中将其注册为
,或者当您已经使用Servlet 3.0(Tomcat 7等)时,使用
@WebListener
注释将其注册为

这是使web应用程序更兼容的一个好方法,将确认保存在其内部使其更容易@AlexandreLavoie,这也是降低web应用程序兼容性的好方法,因为System#setProperty会影响整个JVM@这是一个错误的术语,我说的是可移植的,不管怎样,当使用整数或长整数时,最好使用null而不是0。如果这仍然影响到您,并且您需要一个可移植的解决方案,您可以查看以下帖子:@Rafael:这是一篇优秀的文章(由我的同事撰写:)。事实上,我们在一个源于JSF1.2的遗留生产系统中以这种方式应用了它,在这个系统中,更改后需要进行太多的测试和更改。如果从一开始就设置的话会更好。
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
    }

}