我有两个页面(假设是page1和page2),每个页面有一个magaedBean (mb1和mb2)。在mb1中,我有一个mb2实例,它们的所有属性以前都是通过mb1中的一个方法设置的。如下所示:
public Mb1(){}//Default constructor
private Mb2 mb2;//Instance of Mb2 inside Mb1我想要的是,通过mb1中的一个方法,以page2(mb2)的控制器是存储在mb1中的实例的方式打开视图page2。
我的两个managedBeans都必须是ViewScoped,我知道我可以通过使用会话作用域来做到这一点,但这不是我需要的。tere是这样做的一种方法吗?
发布于 2013-05-06 23:17:34
为什么托管bean要负责初始化另一个bean?我宁愿向Mb2提供必要的信息,这样他就可以对自己进行初始化。
如果你打算传递一个对象并避免Mb2的自我初始化(假设你正在使用JSF2),我建议你看看JSF的Flash作用域。
Tough Flash本身并不是一个作用域,它是基于Ruby的POST - REDIRECT - GET模式实现的一个功能(AFAIK)。您可以创建自己的对象来存储数据并让Mb2对其进行操作,而不是将bean作为参数。
当您需要导航到page2时,只需将该项目存储在闪存中,然后在创建Mb2时检索它。
要存储它,您需要Flash,它可以通过多种方式获得:
FacesContext.getCurrentInstance().getExternalContext().getFlash();或
@ManagedProperty("#{flash}")
private Flash flash;
public void setFlash(Flash jsfFlash) {
flash = jsfFlash;
}Flash本身是一个映射(就像请求和会话的映射一样),所以你可以把你的对象放在那里:
ManagingObject o = new ManagingObject();
//Initialize the object and set the desired properties.
flash.put("ManagingObject", mo);然后,您可以在Mb2中获取该对象,方法是获取Flash,然后从其中获取对象,例如,在preRenderView定义的事件中。
https://stackoverflow.com/questions/16398479
复制相似问题