首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个managedBean恢复managedBean

如何从另一个managedBean恢复managedBean
EN

Stack Overflow用户
提问于 2013-05-06 20:10:17
回答 1查看 149关注 0票数 0

我有两个页面(假设是page1和page2),每个页面有一个magaedBean (mb1和mb2)。在mb1中,我有一个mb2实例,它们的所有属性以前都是通过mb1中的一个方法设置的。如下所示:

代码语言:javascript
复制
public Mb1(){}//Default constructor
private Mb2 mb2;//Instance of Mb2 inside Mb1

我想要的是,通过mb1中的一个方法,以page2(mb2)的控制器是存储在mb1中的实例的方式打开视图page2。

我的两个managedBeans都必须是ViewScoped,我知道我可以通过使用会话作用域来做到这一点,但这不是我需要的。tere是这样做的一种方法吗?

EN

回答 1

Stack Overflow用户

发布于 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,它可以通过多种方式获得:

代码语言:javascript
复制
FacesContext.getCurrentInstance().getExternalContext().getFlash();

代码语言:javascript
复制
@ManagedProperty("#{flash}")
private Flash flash;

public void setFlash(Flash jsfFlash) {
    flash = jsfFlash;
}

Flash本身是一个映射(就像请求和会话的映射一样),所以你可以把你的对象放在那里:

代码语言:javascript
复制
ManagingObject o = new ManagingObject();
//Initialize the object and set the desired properties.
flash.put("ManagingObject", mo);

然后,您可以在Mb2中获取该对象,方法是获取Flash,然后从其中获取对象,例如,在preRenderView定义的事件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16398479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档