25

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

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

しかし、私は解決策に完全に満足していません。コンテキストは同じです。整数値を必要とする 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」を実際の ID として扱う必要があるため、値を「0」から「null」に戻すことはできません。そのため、id テキストボックスが空のままかどうかを実行時に知る必要があります。

4

1 に答える 1

47

を使用して、システム プロパティをプログラムで設定できます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、すでに Servlet 3.0 (Tomcat 7 など) を使用している場合は、@WebListener注釈を付けて登録します。

于 2011-03-07T20:47:09.617 に答える