JSF CDI:会话范围bean [s]最佳实践

时间:2010-11-22 10:32:29

标签: java jsf jsf-2

我目前正在学习JSF 2.0,我很高兴这个会话范围功能的存在,这对于在同一页面上打开一个新选项卡或一个新窗口并拥有单独的资源非常有用,而不是相互覆盖

但我很好奇如何以一种好的方式实现这一点,关于何时开始对话以及何时关闭它。

就我而言,我为每个JSF页面都有每个CDI bean。让我们说我有一个菜单,当它被点击时,这将导致页面A,并且从A,可能导致B,B可能导致C,C可能导致D,所有这4个页面都连接在一起链。

可以从B或C或D bean访问A的bean属性,也可以从C或D bean等访问B的属性。

现在我很困惑:

  • 是否所有这些A B C D都应该是 在谈话范围内与否,或 也许只是A?因为我觉得 有时来自另一个页面 在ABCD链之外,就像一个页面 F,它可以导航到B页, 虽然我不知道如何供应 还有来自bean B的数据。
  • 是否所有这些A B C D都应该是 合并成一个豆
  • 何时何地开始 谈话,我在思考 构造函数,但我不认为这是一个 好主意,因为我更喜欢开始 首次访问时的对话 页面,而不是豆
  • 何时何地停止 谈话,所以不会
  • 未使用的资源

请分享您的想法。

1 个答案:

答案 0 :(得分:11)

JSF 2提供了请求,视图,会话和应用程序范围。 CDI引入了Conversation范围,但更重要的是,它引入了一个标准,可以将新范围添加到平台。

您所描述的范围可能更适合窗口范围之类的自定义范围。实现此范围的两个项目是:

  1. Apache MyFaces CODI
  2. IceFaces有一个JSF(非CDI)Window scope implementation
  3. 尽管如此,我还是鼓励你重新思考你的bean结构。我自己非常喜欢View范围,再加上JSF 2视图参数,可以将信息从一个页面传播到另一个页面(以及从一个View范围实例传播到另一个页面)。

    MyFaces“View Access”范围看起来像另一种简洁的方法,只要您浏览的页面保持对该范围的引用,bean就会保留在范围内。