我目前正在学习JSF 2.0,我很高兴看到这个对话范围功能的存在,这对于打开一个新标签页或一个新窗口非常有帮助相同的页面并拥有单独的资源,而不是相互压倒。JSF CDI:会话范围bean [s]最佳实践
但我很好奇如何以良好的方式实现这一点,关于何时开始对话以及何时关闭它。
在我的情况下,我有每个JSF页面的每个CDI bean。假设我有一个菜单,当它被点击时,这将导致页面A,并从A导致B,B可能导致C,C可能导致D,所有这4个页面连接成一个链。
从B或C或D豆访问A的bean属性是可能的,访问B的属性也可以从C或D豆等等。
现在即时通讯很困惑:
- 是否所有这些A B C d应该在谈话范围 与否,或 也许只是一个?因为我认为 有时来自ABCD链之外的另一个页面 ,如页面 F,它可能导航到页面B, ,但我不知道如何向bean B提供 数据。
- 是否所有这些ABCD应 合并成一个豆
- 何时何地开始 交谈,即时通讯思考 构造函数,但我不认为这是一个 好主意,因为我更喜欢开始 谈话首先访问 当页面,而不是豆
- 在哪里以及何时停止 谈话,因此有不会是 游逛
请分享你对此的看法。
CDI不是标准JSF的一部分。CDI代表上下文和依赖注入(JSR-299),它覆盖'javax.enterprise'包的注释。会话范围也不是标准JSF的一部分。它是JSF 1.2中的JBoss Seam发明,并且被JSF 2.0规范采用为View Scope,可以通过'@ ViewScoped'注释来触发。现在,你究竟在说什么? – BalusC 2010-11-22 10:59:26
Hello BalusC,感谢您的澄清。我用CDI这个术语来说明我在使用什么,但也许这些信息与我的问题无关,我的道歉:)据我所知,@ViewScoped是单页重新显示,属性将是持续存在。但是我想从对话范围中获得的是,我可以在多个选项卡上打开相同的页面,每个选项卡就像拥有自己的会话范围一样。因此,在选项卡上的myBean.name上提交值'albert'将不会覆盖其他选项卡上的myBean.name。但我不知道从哪里开始和结束对话。 – bertie 2010-11-22 11:33:33
如果有4页的话,这会让我更加困惑,例如,页面A是一个浏览页面,用户可以搜索,页面B是详细页面,用户可以修改细节,页面C是用户可以修改的页面细节等等。如果我想在几个标签中打开页面A而不会影响另一个页面,我必须在A的bean上使用对话范围。但是我想这对B C和D来说也是谈话范围?关于何时何地我应该开始/结束谈话。我的意思是,用户可以打开新的标签,并关闭标签。我如何检测到这一点并关闭对话? – bertie 2010-11-22 11:36:36