私のJSF2ベースのアプリケーションには、(他のUIコンポーネントの中でも)いくつかのチェックボックスを含むフォームがあります。
チェックボックスに、チェックされたときに起動するajaxリクエストを登録しました。ajaxリクエストは、実際にはバッキングBeanの別のチェックボックスの値を更新するだけです。その結果、他のチェックボックスもオンになります(再レンダリングされると、レンダリング応答フェーズでバッキングBeanから更新された値を取得するため)。
これは、フォーム全体が送信され、検証エラーが発生するまで正常に機能します。その後、ajaxリクエストは引き続き機能し、バッキングBeanの値を変更しますが、更新されたチェックボックスを再レンダリングするフェーズでは、その値はバッキングBeanからではなく、ComponentStateHelper
クラスから取得されたキャッシュ値から取得されます。
私が理解している限り、これはJSF 2の新機能に使用され、コンポーネントツリーへの部分的な変更のみを保存します。
私が理解していないのは、これは検証フェーズとどのように関連しているのかということです。StateHelper
検証でエラーが見つかったときに、チェックボックスのクラスにキャッシュされた値があるのはなぜですか?