2012-02-29 13 views
4

jsfアプリケーションでは、要約されたデータを持つ表があります。詳細に興味があれば、行をクリックして別のページの詳細を見ることができます。 「マスター」ページのマネージドBeanがイオンビュースコープである場合、「詳細」ページから戻ってくるたびに再作成されます。ユーザーがチェックボックスをオンにしなければならないと思っていません。詳細はこちら。私はセッションの中でbeanを置くことを解決することができますが、ユーザーが完全に異なるセクションでアプリケーションとやり取りしているときにも、この方法でBean(およびデータ)はメモリに保持されます。おそらく私はカスタムスコープが必要でしょう:Jsf:2ページのマスターディテールのどのBeanスコープですか?

  • カスタムスコープに関するドキュメントは貧弱で、私はバグがあり、うまく動作しないと戸惑う人々について少し怖いです。
  • 私が扱っているシナリオは私にとってはかなり一般的だと思われるので、なぜそれに対応するための解決策がないのだろうと思います。

おかげ フィリッポ

答えて

2

詳細ページが冪等でなければならない場合(つまり、ブックマーク可能、ブックマーク可能、検索ボットクロール可能)は、リクエストされた豆を2つ使用し、エンティティIDをリクエストパラメータとして持つGETリンクを使用して、詳細ページ。具体的な例については、Creating master-detail pages for entities, how to link them and which bean scope to chooseも参照してください。

詳細ページが冪等である必要がない場合は、常にマスタービューと詳細ビューを条件付きでレンダリングしたり、マスターページの一部のモーダルダイアログに詳細を表示することもできます。このようにして、単一ビューのスコープ付きBeanを続行できます。

JSF側では、DBパフォーマンスのコストについてあまり心配する必要はありません。むしろ、永続化レイヤーでそれを構成し、細分化します。例えば、JPAでは、第2レベルのキャッシュを設定することができます。 500〜1000を超えるアイテムがある場合は、データベースレベルのページネーションを検討してください。

1

例えば、それぞれの時間をマスターページをリロードして有効です詳細ページを表示した後にデータが変更された可能性がある場合。 @ViewScopedよりもあなたが長くのために利用可能なデータを保持したい場合は、あなたのオプションは次のとおりです。

  • あなたはJSF 2.0はの一部であるJEE6を使用して、その対話スコープ(CDIの一部)を見てする必要があります
  • JEE6 CDIのためのいくつかの追加のスコープは、潜在的にセッションスコープを使用して
  • マスターまたは詳細ページのためではありませんリクエストヒットはそう、アヤックスを使用するように設計を手直しするとき必ずきちんと作るMyFaces CODI
  • を通じて提供されていますマスターページのレコードをクリックすると、その詳細が同じビューに読み込まれます。 @ViewScopedを使用することができます

私の好みは会話スコープです。どのJSF実装を実行しているのか、どの環境にあるのかは言及していません。

+1

私は会話スコープについて読みましたが、他の場所に行くことができるメニューがあれば、会話を終了する可能性はなく、明示的にマネージドBeanのメソッドを呼び出す必要があります。 – Filippo

+0

MyFaces CODIは簡単な作業です。 –

関連する問題