【发布时间】:2011-12-01 19:22:24
【问题描述】:
我在我的 JSF 应用程序中使用 Myfaces CODI @ViewAccessScoped 支持 bean。中的一个 好处是我不需要使用视图参数来传递信息 意见。作为记录,@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,那么当我访问 #{page2Bean.target} 时 page2 的值为“hello, world!”。
实际上,我将数据从 page1 视图推送到 page2 视图。另一种选择是 将数据从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 之一时才会使用内存 运行时间?
我希望这不是一个太幼稚的问题,但我不确定它究竟是如何工作的 如果第一个问题的答案是肯定的,我或多或少最终会使用 @SessionScoped!。
感谢您的澄清。
【问题讨论】: