次のシナリオで共通のパターンがあるのだろうかと思います。@PostConstructとcommandButton/commandLinkのパラメータの場合
ひとつのリクエストスコープ付きBeanで1つのJSFページをサポートしています。 ユーザーがこのページを入力すると、データベーステーブルからすべてのデータ行をフェッチしたいと思う。 同じJSFページには、問合せ基準を提供するためのフォームが含まれています。ユーザーが照会条件を指定してフォームを送信すると、その結果を同じページにも表示したいと考えています。
ページエントリですべての行を取得するのに適した場所は@PostConstructメソッドです。追加の(注入された)リクエストパラメータはすでにここで利用可能であり、クエリで使用できるので、これを行うには最適な場所です。ただし、フォームから提出されたパラメータはまだ使用できません。アクションメソッドでアクセスできます。
ユーザーがフォーム条件を使用してデータベーステーブルにクエリを実行すると、データベースはこの場合2回クエリされます。要求スコープ付きBeanが再作成され、すべての行をフェッチする@PostConstructメソッドは、ユーザーが望むものをフェッチするフォームアクションメソッドの前に呼び出されます。
もちろん、アクションメソッドでのみDBクエリを使用して、別のBeanを使用する別のJSFページにフォーム結果をリダイレクトできます。しかし、1つのJSFページと1つのマネージドBeanで必要なものだけをフェッチする方法はありますか?
ありがとう!それは仕事をするはずです。 ViewScoped Beanの唯一の問題は、私が気づいている限り、GETリクエストパラメータを使用することができないことです。しかし、commandLink/Button setPropertyActionListenerを使用して、すべての追加パラメータを渡すことは可能です。 – Dzik
あなたはGETパラメータを ''で使うことができます。これはGETパラメータを扱う '@ ManagedProperty'よりはるかに良いです。 http://stackoverflow.com/questions/4888942/viewparam-vs-managedpropertyvalue-param-idも参照してください。 –
BalusC