如何在JSF 2中的bean之间传递信息?

时间:2011-03-18 10:56:15

标签: jsf jsf-2

我有一个场景,并且没有明确的想法让它工作。

以下是示例方案:

  1. 我有一个 myView.xhtml 文件,可以显示为窗口弹出窗口或来自 2其他容器xhtml的主要对话框 ,让我们说 container1.xhtml container2.xhtml myView.xhtml 包含在这样的内容中?<ui:include src="myView.xhtml" />
  2. 而且,我们还有视图范围的bean,我们称之为 myViewBean container1Bean container2Bean
  3. container1Bean 具有 transactionDate 的属性, container2Bean 具有 transDate
  4. 的属性
  5. myViewBean 的@PostConstruct方法将根据日期类型 >。
  6. 在container1.xhtml上,如果用户点击了一个按钮,该按钮将弹出 myView.xhtml container1Bean 应该能够将 transactionDate 提供给 myViewBean ,并且 < em> myViewBean 将能够在@PostConstruct方法中基于它进行查询。
  7. 在container2.xhtml上,如果用户点击了一个按钮,该按钮将弹出 myView.xhtml container2Bean 应该能够将 transDate 提供给 myViewBean ,并且 < em> myViewBean 将能够在@PostConstruct方法中基于它进行查询。
  8. 我在考虑在 @Inject Container1Bean @Inject Container2Bean > MyViewBean ,所以在 MyViewBean 中,我可以获得container1Bean的 transactionDate container2Bean的transDate 。决定哪个容器bean处于活动状态是检查哪个容器bean不为空。

    但是,如果容器bean增长,可能有其他容器bean使用MyViewBean, @Inject ContainerXXBean 将在 MyViewBean 即可。必须有其他解决方案。

    请分享如何实现这一点的想法..谢谢! : - )

    谢谢!

2 个答案:

答案 0 :(得分:2)

如果您只想访问其他bean的内容,则可以执行该程序化。

从一个bean获取FacesContext的当前实例。使用该上下文,您可以获取其他bean的实例。

illustration。根据您问题的标题,您希望在bean之间获得一些信息。您可以通过调用其他bean的公共方法来完成此操作,这些方法可能是专门为此目的而创建的。 (setter方法干将)。

答案 1 :(得分:1)

如果container1Bean,myViewBean和container2Bean共享一些属性,为什么不把它们放在一个新的bean中呢? (我们称之为sharedBean,但我相信你会找到一个适合你案例的更好的名字)。然后,您可以在每个依赖bean中使用@ManagedProperty注入sharedBean。我们试着不要使用循环引用。

我还建议您检查一下您的架构。你确定你需要所有的豆子,这样分开吗?这听起来像是难以维护的东西。