JSF アプリケーションで Myfaces CODI @ViewAccessScoped バッキング Bean を使用しています。利点の 1 つは、ビュー間で情報をやり取りするためにビュー パラメーターを使用する必要がないことです。レコード @ViewAccessScoped は、新しいビューの最初のリクエストがアクセスしなくなるまで、Bean がアクセス可能であることを保証します。page1 から page2 に文字列値を渡したい場合を考えてみましょう。
Page1Bean.java (page1.xhtml のバッキング Bean)
@Inject private Page2Bean page2Bean;
private String source = "Hello, World!";
...
page2Bean.setTarget(source);
Page2Bean.java (page2.xhtml のバッキング Bean)
private String target;
page1 から page2 に直接移動すると、page2 から #{page2Bean.target} にアクセスすると、値は「hello, world!」になります。
実際には、データを page1 ビューから page2 ビューにプッシュしています。もう 1 つのオプションは、page1 ビューから page2 ビューにデータをプルすることです。つまり、page2Bean で @Inject Page1Bean と @ViewAccessScoped を使用すると、page1Bean.getSource() にアクセスできるようになります (前のビューにある限り)。
これで問題ありませんが、現実の世界では、ユーザー入力に応じて、page1 から他の多くのページのいずれかに移動したい場合があります。したがって、 Page1Bean.java は次のようになります。
Page1Bean.java (改訂版)
@Inject private Page2Bean page2Bean;
@Inject private Page3Bean page3Bean;
@Inject private Page4Bean page4Bean;
@Inject private Page5Bean page5Bean;
@Inject private Page6Bean page6Bean;
@Inject private Page7Bean page7Bean;
@Inject private Page8Bean page8Bean;
私の質問ですが、page1Bean のメモリ フットプリントには常に page2Bean-page8Bean が含まれますか? または、実行時に @Inject された Bean の 1 つにアクセスする場合にのみメモリが使用されますか?
これがあまりにも素朴な質問ではないことを願っていますが、それがどのように機能するか正確にはわかりません。最初の質問に対する答えが「はい」の場合、多かれ少なかれ @SessionScoped! を使用することになります。
明確にしていただきありがとうございます。