2011-03-18 54 views
1

我有一个场景,并没有明确的想法,这工作呢。如何在JSF 2中的bean之间传递信息?

这里的示例场景:

  1. 我有一个myView.xhtml文件,可以将显示为一个窗口弹出或2其他容器XHTML一个primefaces对话框弹出,让我们说container1.xhtmlcontainer2.xhtml(该myView.xhtml包含在类似的东西? <ui:include src="myView.xhtml" />
  2. 而且,我们也有观点作用域bean,我们姑且称之为myViewBeancontainer1Beancontainer2Bean
  3. container1Bean财产transactionDatecontainer2Bean具有transDate
  4. myViewBean的@PostConstruct方法的属性将查询基于类型日期的参数数据库
  5. 在container1.xhtml,如果用户点击一个按钮,将弹出myView.xhtmlcontainer1Bean应该能够提供它的transactionDatemyViewBean ,并且myViewBean将能够基于它在@PostConstruct方法中进行查询。
  6. 在container2.xhtml,如果用户点击一个按钮,将弹出myView.xhtmlcontainer2Bean应该能够提供它的transDatemyViewBean ,并且myViewBean将能够基于它在@PostConstruct方法中进行查询。

我想使用@Inject Container1Bean@Inject Container2BeanMyViewBean,让里面的MyViewBean,我可以得到transactionDate容器1豆子transDate container2Bean。决定哪个容器bean是活动的是检查哪一个不是null。

但是,如果容器豆生长,有可能是其他容器豆是利用MyViewBean,而@Inject ContainerXXBean将在数量增长内MyViewBean。必须有其他解决方案。

请分享如何完成此操作的想法..谢谢! :-)

谢谢!

回答

1

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

我也会建议您查看您的架构。你确定你需要所有的豆子,分割完全是这样吗?这听起来像是一件难以维系的事情。

+0

谢谢您的建议。而且我非常感兴趣的是您关于审查架构的建议。我有一个基本的想法,即每个页面都有它自己的view-scoped-bean来处理每个页面的操作。此外,有些页面可以重用,可以从其他页面查看,并且可以参数化(就像示例一样,viewBean可以根据参数具有不同的查询结果)。你有关于如何分割jsf bean的建议吗?我一直想知道这方面的最佳做法。谢谢 ! – bertie 2011-03-18 15:37:49

+0

我只是说,在纸上画一个小图。你可以共享一个bean来获得多个视图,有时它会有所帮助。另外,如果图上的多个视图共享太多信息,只需让它们共享该bean。剩下的问题是,问问自己是否应该有参数视图(应该可以通过更改url来影响视图?),或者只需调用方法(使用可能是对象的参数)来导航。 – ymajoros 2011-03-21 06:32:44

+0

谢谢你..这是有道理的! – bertie 2011-03-22 04:20:08

1

如果你只想访问其他bean的内容,你可以编程。

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

看到这个illustration。根据你的问题的标题,你想要在豆类之间的一些信息。你可以通过调用另一个bean的公共方法来完成这个任务,这些方法可能是专门为此目的而创建的。 (setter方法干将)。

+0

谢谢,这是一个从FacesContext获取bean的方式列表。但我认为这里的情况并不是通过名称获取bean,因为我可以使用@Inject。这更多的是我怎样才能使一个可重用的视图/豆,可以以某种方式从另一个包含视图参数化。我开始考虑为此使用JSF 2复合组件。呵呵 .. – bertie 2011-03-19 12:22:07

相关问题