为什么托管 bean 负责初始化另一个托管 bean?我宁愿提供必要的信息,Mb2
以便他可以初始化自己。
如果您打算传递一个对象并避免Mb2
自初始化(假设您使用的是 JSF 2),我建议您看看 JSF 的Flash Scope。
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
定义的事件中。