繁体   English   中英

如何从另一个ManagedBean还原ManagedBean

[英]How to restore a managedBean from another managedBean

我有两个页面(比如说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,我知道我可以通过使用session作用域来做到这一点,但这不是我所需要的。 这是一种方法吗?

为什么托管bean负责初始化另一个bean? 我希望向Mb2提供必要的信息,以便他可以初始化自己。

如果您打算传递一个对象并避免Mb2的自我初始化(并假设您正在使用JSF 2),那么建议您看一下JSF的Flash Scope

Tough Flash本身并不是作用域,而是基于功能的(AFAIK),基于Ruby的POST-REDIRECT-GET模式的实现。 您可以创建自己的对象来存储数据,而不是将bean作为参数,并使用Mb2进行操作。

当您需要导航到page2 ,只需将该项目存储在Flash中,然后在创建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定义的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM