17

プロパティh:inputTextにバインドされている (したがって、 を受け入れることができる) JSF ページで を使用しています。に値が書かれていない場合、フォームは の代わりに を送信しています。Trinidad 1.2.2 と Tomcat 6.0.20 を使用しています (Tomcat 6.0.14 も試しましたが、これは特定の Tomcat バージョンで発生する可能性があることがわかりました)。Integernullh:inputText0null

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

27

この「機能」は、Tomcat 6.0.16 で導入された EL のバグ修正の結果です。EL 仕様の 1.18.3 章に従って、数値型の値はnull強制的に 0 にする必要があります。Tomcat 6.0.16 より前では、これは「誤って」空の文字列に強制されていました。

結局のところ、空の文字列は実際にはゼロよりもはるかに直感的でした。Apache の Tomcat 担当者は、このバグ修正について多くの苦情を受け取ったため、Tomcat 6.0.17 に従って、このバグ修正を無効にする VM 引数のフレーバーで新しい構成設定を導入しました。

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

ちなみに、空/nullプリミティブ型をゼロに、空/null非プリミティブ 型を空の文字列にのみ強制するように、この仕様の変更を要求しましたjava.lang.Number: JSP EL issue 184。彼らはそれで大したことはしませんでしたが、少なくともこの問題は多くの票を獲得しました。誰が知っている...この動作は直感的ではないため、少なくとも実際にはかなり面倒です。

以下も参照してください。

于 2010-06-25T11:28:39.733 に答える