私のナビケースは以下の通りです。ランディング ページがあり、そこからストア ページに移動できます。このストア ページは、2 つの異なる製品カタログを扱うことができます。これは、特定の Retailer オブジェクトによって制御されます。
ストア ページ以降、セッション中の Retailer に依存する複数の Bean とページがあります。小売業者を切り替えるイベントは、ランディング ページからの新しい選択です。選択範囲でアクションを実行してストア ページに移動するだけで、セッション中の Retailer を制御できました。ただし、これは Bean のアクションで制御する必要があります。
私の問題は、ナビゲーション バーからストア ページへの直接ナビゲーションの場合です。そのため、ストア ページで特定の Retailer を初期化するメカニズムが必要です。そして、これは、このページが依存するすべての Bean で実行する必要があります。これは GET パラメータを介して行う必要があります。preRenderView リスナーで複雑な決定を行うことでこの動作を行うことができますが、これがよりエレガントな方法だとは思いません。
したがって、根本的な問題は、データが複数の Bean (それらのスコープに関係なく) によって管理されているページへの直接ナビゲーションをインターセプトし、これらの Bean がアクションで使用するものをセッションに導入する方法です。
私はこれを試しました(SessionScoped Beanで):
1) @PostConstruct + @ManagedProperty(with param) を使用すると、Bean が SessionScoped であるため、Bean のインスタンス化中にエラーが発生します。
2) viewParam + preRenderView イベントを使用すると、イベントの前にパラメーターが挿入され、目的の動作が得られますが、これはページが読み込まれるたびに発生します。
この初期化を 1 回だけ行い、GET パラメータを使用したいと考えています。
どうすればいいですか?