私は、JSF 2.0 と Richfaces 4 を使用するアプリケーションに取り組んでいます。このアプリケーションは、要素を表示する多くのテーブルと、もちろん通常の表示/編集/削除オプションで構成されています。いくつかのSOブラウジングとGoogle検索の後、見つけた回答では問題が解決しなかったため、質問を投稿することにしました。
現在、要点を言えば、リクエスト Bean に格納されている特定の属性を処理するときに、アプリケーションで問題が発生し、特定の時点で、連続するリクエストが原因で失われます。
たとえば、オブジェクトを編集したい場合、オブジェクトはフォームにデータを表示するリクエスト Bean に送信 (f:propertyActionListener) され、リクエストが終了すると破棄されます。保存すると、新しいオブジェクトが作成され、フォームの属性がそれに設定され、ID がないため (JPA + Hibernate)、アイテムは更新される代わりに保存されます。
私は多くのオプションを調査しましたが、これまでに行ったことと結果は次のとおりです。
f:param + h:link または h:commandLink: @ManagedProperty を使用すると、param が null であり、JNDI を介して検索するコンテキストでそれを見つけることができません。
f:setPropertyActionListener + h:commandLink + Request Bean:動作しますが、一部のデータが失われています。データを表示するフォームには条件付きでレンダリングされたフィールドがいくつかあり、その情報を保持できないため、検証フェーズで無効なデータが見つかった場合、フォームが混乱します。
f:viewParam + h:commandLink + View Scoped Bean:ここに奇妙なものがあります。Bean はクリーンであるため、フォームは情報なしでレンダリングされるため、フォームをレンダリングする前に Bean が破棄されるように見えるため、これは直接機能しません。
セッション Bean の使用:魅力的に機能しますが、JSF ライフサイクルについてまだ学んでいるという理由だけで、すべてのフォームに対してセッション Bean を作成したくはありません。適切な方法で作成したいと考えています。
リクエスト セッション アプローチを維持したい場合、パラメータ (オブジェクトまたはプレーン文字列のいずれか) を保存し、後でリクエスト Bean で取得する方法はありますか?
これが役立つかどうかはわかりませんが、ui:insert と ui:define を介してマスター ページを使用しています。