[英]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.