web-dev-qa-db-ja.com

プログラムで-Dorg.Apache.el.parser.COERCE_TO_ZERO = falseを設定する方法

この質問は次のようなものです。

jsf:UIの入力テキストにバインドされた整数プロパティは送信時にゼロに設定されます

しかし、私はその解決策に完全には満足していません。コンテキストは同じです。整数値を必要とするWebフォームがあります。テキストボックスが空のままの場合、整数フィールドを「null」にしますが、代わりにELパーサーが自動的にidフィールドを「0」に設定します。

ローカルのTomcatVMでJVMパラメータを設定することで問題を修正できます。

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

ただし、これはクライアントのマシンでは機能しません。このJVMパラメータを「コード内」で設定/変更することは可能ですか。

更新:これが要求されていることがわかりましたが、他に回避策がある場合は、それも聞きたいと思います。

https://issues.Apache.org/bugzilla/show_bug.cgi?id=4881

更新2:アプリケーションは「0」を実際のものとして扱う必要があるため、値を「0」から「null」に戻すことはできませんid。したがって、実行時にidテキストボックスが空のままになっているかどうかを知る必要があります。

25
Steve

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
    }

}

<listener>web.xmlとして登録するか、すでにサーブレット3.0(Tomcat 7など)を使用している場合は、@WebListenerアノテーションを付けて登録します。

44
BalusC