【发布时间】:2011-11-02 18:26:52
【问题描述】:
我有三个屏幕(views) 与每个视图的单独托管 bean 相关联。
而且,我有一个可以在所有视图中打开的通用弹出对话框。
我可以为状态为@NoneScoped; 的弹出窗口单独定义一个managedbean 并在每个父bean 中维护它的一个实例吗?或
我是否需要在所有三个父视图中维护弹出数据?
请给我建议最佳做法。
【问题讨论】:
标签: jsf
我有三个屏幕(views) 与每个视图的单独托管 bean 相关联。
而且,我有一个可以在所有视图中打开的通用弹出对话框。
我可以为状态为@NoneScoped; 的弹出窗口单独定义一个managedbean 并在每个父bean 中维护它的一个实例吗?或
我是否需要在所有三个父视图中维护弹出数据?
请给我建议最佳做法。
【问题讨论】:
标签: jsf
我认为这就是您正在寻找的(查看 BalusC 的答案)-
Whats the correct way to create multiple instances of managed beans in JSF 2.0
而且由于您使用的是@NoneScoped(与上述问题中的@RequestScoped 不同),我还建议您查看BalusC 的这个答案(关于@NoneScoped)-
what is none scope bean and when to use it?
根据这个答案,您不能维护任何非作用域的 managedbean 实例,因为它们一被使用就会被丢弃。
因此,在您的情况下,由于您有三个单独的视图,因此对于每个视图,都会构造 bean 并用于构建视图并进行垃圾处理。 (看起来它甚至不会持续一个请求周期)。当您请求另一个视图时,它将是一个单独的实例。
要拥有一个 bean 的多个实例,您可以在 Session-Scoped be 中拥有三个属性(以使它们在多个视图中存活)。
@ManagedBean
@SessionScoped
public class Parent {
private Child child1;
private Child child2;
private Child child3;
// ...
}
【讨论】:
jsf 2.0 以便让更多人查看和回答您的问题。