【问题标题】:How to pass information between beans in JSF 2?如何在 JSF 2 中的 bean 之间传递信息?
【发布时间】:2011-03-18 10:56:14
【问题描述】:

我有一个场景,但还没有一个明确的想法。

这是示例场景:

  1. 我有一个 myView.xhtml 文件,它可以显示为来自 2 个其他容器 xhtml 的窗口弹出窗口或 primefaces 对话框弹出窗口em>,比如说 container1.xhtmlcontainer2.xhtmlmyView.xhtml 包含在这样的内容中?<ui:include src="myView.xhtml" />)
  2. 而且,我们还有视图范围的 bean,我们称它们为 myViewBeancontainer1Beancontainer2Bean
  3. container1BeantransactionDate的属性,container2Bean > 具有 transDate 的属性
  4. myViewBean 的@PostConstruct 方法将根据日期类型的参数查询数据库
  5. 在 container1.xhtml 上,如果用户单击将弹出 myView.xhtml 的按钮,container1Bean 应该能够将其 transactionDate 提供给 myViewBeanmyViewBean 将能够在 @PostConstruct 方法中基于它进行查询。
  6. 在 container2.xhtml 上,如果用户单击将弹出 myView.xhtmlcontainer2Bean 的按钮strong> 应该能够将其 transDate 提供给 myViewBeanmyViewBean 将能够在 @PostConstruct 方法中基于它进行查询。

我正在考虑在 @Inject Container1Bean@Inject Container2Bean >MyViewBean,这样在MyViewBean里面就可以得到container1Bean的transactionDate > 或 container2Bean 的transDate。要确定哪个容器 bean 处于活动状态,就是检查哪个容器 bean 不为空。

但是如果容器 bean 增长了,可能会有其他容器 bean 使用 MyViewBean,并且 @Inject ContainerXXBean 会在 @Inject ContainerXXBean 内增加数量强>MyViewBean。必须有其他解决方案。

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

谢谢!

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

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

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

    看到这个illustration。根据你的问题的标题,你想要豆子之间的一些信息。您可以通过调用其他 bean 的公共方法来完成此操作,这些方法可能专门为此目的而创建。 (setters-getters)。

    【讨论】:

    • 谢谢,这是从 FacesContext 获取 bean 的方法列表。但我认为我的情况与按名称获取 bean 无关,因为我可以使用 @Inject。更重要的是我如何制作一个可以从另一个包含视图以某种方式参数化的可重用视图/bean。我开始考虑为此使用 JSF 2 复合组件。呵呵..
    【解决方案2】:

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

    我还建议审查您的架构。你确定你需要所有这些豆子,完全像这样分区吗?这听起来很难维护。

    【讨论】:

    • 感谢您的建议。我对你关于审查架构的建议非常感兴趣。我有一个基本的想法,即每个页面都有自己的 view-scoped-bean 来处理每个页面的操作。而且,有些页面是可重用的,可以从其他页面查看,并且可以参数化(就像示例一样,viewBean 可以根据参数有不同的查询结果)。您对如何对 jsf bean 进行分区有什么建议吗?我也一直想知道这方面的最佳做法。谢谢!
    • 我只想说,在纸上做一个小图。您可以为多个视图共享一个 bean,它有时会有所帮助。此外,如果图表上的多个视图共享太多信息,只需让它们共享 bean。剩下的,问问你自己是否应该有带参数的视图(是否应该通过更改 url 来影响视图?)或者你是否应该只调用方法(带参数,可能是对象)来导航.
    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多