Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSF2中如何在bean之间传递信息?_Jsf_Jsf 2 - Fatal编程技术网

在JSF2中如何在bean之间传递信息?

在JSF2中如何在bean之间传递信息?,jsf,jsf-2,Jsf,Jsf 2,我有一个场景,但还不清楚这是否可行 以下是示例场景: 我有一个myView.xhtml文件,可以显示为窗口弹出窗口或primefaces对话框弹出窗口,从2个其他容器xhtml,比方说container1.xhtml和container2.xhtml(myView.xhtml包含类似的内容?) 而且,我们还有视图范围的bean,我们称它们为myViewBean,container1Bean和container2Bean container1Bean的属性为transactionDate,cont

我有一个场景,但还不清楚这是否可行

以下是示例场景:

  • 我有一个myView.xhtml文件,可以显示为窗口弹出窗口或primefaces对话框弹出窗口,从2个其他容器xhtml,比方说container1.xhtmlcontainer2.xhtmlmyView.xhtml包含类似的内容?
  • 而且,我们还有视图范围的bean,我们称它们为myViewBeancontainer1Beancontainer2Bean
  • container1Bean的属性为transactionDatecontainer2Bean的属性为transDate
  • myViewBean的@PostConstruct方法将基于日期类型的参数查询数据库
  • 在container1.xhtml上,如果用户单击一个按钮,将弹出myView.xhtmlcontainer1Bean应该能够向myViewBean提供它的transactionDate,并且myViewBean将能够在@PostConstruct方法中基于它进行查询
  • 在container2.xhtml上,如果用户单击一个按钮,将弹出myView.xhtmlcontainer2Bean应该能够向myViewBean提供它的transDate,并且myViewBean将能够在@PostConstruct方法中基于它进行查询
  • 我正在考虑在MyViewBean中使用@Inject Container1Bean@Inject Container2Bean,以便在MyViewBean中,我可以获得Container1Bean的交易日期或Container2Bean的转换日期。决定哪个容器bean是活动的就是检查哪个容器bean不是空的

    但是,如果容器bean增长,那么可能会有其他容器bean使用MyViewBean,而@injectContainerXXBean将在MyViewBean中大量增长。必须有其他解决办法

    请分享如何实现这一目标的想法。。谢谢!:-)


    谢谢大家!

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


    我还建议您回顾一下您的体系结构。你确定你需要所有这些豆子,像这样分割吗?这听起来很难维护。

    如果您只想访问其他bean的内容,您可以通过编程实现

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


    看这个。根据您问题的标题,您希望在bean之间获得一些信息。您可以通过调用另一个bean的公共方法来实现这一点,该方法可能是专门为此而创建的。(setters-getter)。

    谢谢你的建议。我对你关于审查架构的建议非常感兴趣。我的基本想法是,每个页面都有自己的视图范围bean来处理每个页面的操作。而且,一些页面是可重用的,可以从其他页面查看,并且可以参数化(就像示例一样,viewBean可以根据参数具有不同的查询结果)。您对如何划分JSFbean有什么建议吗?我一直在想这方面的最佳实践。谢谢我只是说,在纸上画一个小图表。您可以为多个视图共享一个bean,这有时会有所帮助。另外,如果图上的多个视图共享了太多信息,只需让它们共享bean即可。对于其余部分,只需问问自己是否应该拥有带有参数的视图(是否可以通过更改url对视图产生影响?),或者是否应该只调用方法(带有参数,可以是对象)来导航。谢谢,这是一个从FacesContext获取bean的方法列表。但我认为我的情况不是按名称获取bean,因为我可以使用@Inject。更重要的是如何创建一个可重用的视图/bean,该视图/bean可以从另一个包含视图参数化。我开始考虑使用JSF2复合组件来实现这一点。呵呵。。