JSF 2.0とRichfaces 4を使用してアプリケーションを作成しています。これは、要素を表示する多くの表から構成されていますが、通常は表示/編集/削除オプションです。私が見つけた答えが私の問題を解決しなかったので、いくつかのSOブラウジングとGoogle検索の後、私は質問を投稿することに決めました。セッションBeanを使用しないエレガントな属性の処理
すぐに、私のアプリケーションでは、リクエストBeanに格納されている特定の属性を処理する際に問題が発生しています。
たとえば、オブジェクトを編集する場合、オブジェクトはフォーム上のデータを表示するリクエストBeanに送信され(f:propertyActionListener)、要求が終了すると破棄されます。保存すると、新しいオブジェクトが作成され、フォームの属性がIDAに設定され(JPA + Hibernate)、アイテムは更新されずに保存されます。
私は多くのオプションを検討してきたし、これは私がこれまでにやったきたものであるとの結果:
F:PARAM + H:リンクまたはh:のcommandLink:@ManagedPropertyで paramはnullです、私はJNDIを通してそれを探すためにContext上でそれを見つけることができません。
f:setPropertyActionListener + h:commandLink + Request Bean:動作していますが、データが失われています。データを表示するフォームには条件付きでレンダリングされたフィールドがいくつかあり、その情報を保持できないため、検証フェーズで無効なデータが見つかった場合はフォームが乱されます。
f:viewParam + h:commandLink +スコープ付きBeanの表示:ここには奇妙なものがあります。これは、Beanがクリーンであるためフォームが情報なしでレンダリングされるため、フォームをレンダリングする前にBeanが破棄されるように見えるため、直接動作しません。
セッションBeanの使用:魔法のよう作品を、私は、私はまだJSFのライフサイクルについての事を学んでいるからといって、すべてのフォームのためのセッションBeanを作成する必要はありません、私はそれを適切に行いたいです方法。
リクエストセッションアプローチを維持したい場合は、パラメータ(オブジェクトまたはプレーンストリング)を保存し、後でリクエストBeanで取得する方法がありますか?
これは役に立ちますが、私はui:insertとui:defineによってマスターページを使用しています。
は、 'ViewScoped' @本当に良い解決策がある:
user/edit.xhtml
は、データ、サービス及びアクションメソッドを保持するために
@ViewScoped
Beanを使用しますか?それはもう少し作業が必要ですが、バックボタンの使用、複数のタブ/ウィンドウ、およびビュースコープのデータの期限が切れる問題を避けるため、通常、@会話スコープを使用しました。私は私の思考について適切なブログ投稿を書く必要がありますが、今のところ私は[前の回答]を参照します(http://stackoverflow.com/questions/10098528/jsf-2-0-viewscoped-redirect-navigation-to -target-blank/10108609#10108609)を使用してください。 – Brianあなたのポスト@BalusCに感謝します!常にあなたの答えを読むのが楽しいです。オプションに関しては、あなたのブログのリンクが意味する特定のタグにバインドするのではなく、タグを直接Beanにバインドすることもありません。 「レンダリング」属性でEL式を使用すると問題が発生する可能性がありますか?私たちは、ケースに応じてフォームを調整するためにそれを行います。 – Gamb
'@ ViewScoped'は、アクションメソッドが' null'または 'void'を返す単一の送信ボタンを持つ基本的なhelloワールドページでも失敗しますか? – BalusC