この質問は次のようなものです。
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テキストボックスが空のままになっているかどうかを知る必要があります。
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
アノテーションを付けて登録します。