【发布时间】:2011-05-13 18:27:10
【问题描述】:
我目前正在学习 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 合为一豆
- 何时何地开始 谈话,我在想 构造函数,但我不认为这是一个 好主意,因为我更喜欢开始 首次访问时的对话 页面,而不是 bean
- 何时何地停止 对话,这样就不会有 闲置的资源闲置
请分享您对此的看法。
【问题讨论】:
-
CDI 不是标准 JSF 的一部分。 CDI 代表上下文和依赖注入 (JSR-299),它涵盖了
javax.enterprise包的注释。对话范围也不是标准 JSF 的一部分。它是 JSF 1.2 时代的 JBoss Seam 发明,已被 JSF 2.0 规范采用为 View Scope,可通过@ViewScoped注释切换。现在,你到底在说什么? -
您好 BalusC,感谢您的澄清。我使用 CDI 一词只是为了说明我在使用什么,但也许该信息与我的问题无关,我的道歉:) 据我所知,@ViewScoped 用于重新显示单个页面,属性将是坚持。但我想从对话范围实现的是,我可以在多个选项卡上打开同一页面,每个选项卡都好像拥有自己的会话范围。因此,在选项卡上的 myBean.name 上提交值“albert”不会覆盖其他选项卡上的 myBean.name。但我对从哪里开始和结束谈话感到困惑。
-
如果有4个页面,这让我更加困惑,例如页面A是浏览页面,用户可以搜索,页面B是详细页面,用户可以修改详细信息,页面C 是用户可以修改子细节的地方,等等。如果我希望能够在多个选项卡中打开页面 A 而不会影响另一个,我必须在 A 的 bean 上使用对话范围。但我想这也将成为 B C 和 D 的对话范围?还有关于我应该在何时何地开始/结束对话。我的意思是,用户可以打开新标签,然后关闭标签。我如何检测到这一点并关闭对话?
-
Albert,在回复不是评论者自己的帖子中的 cmets 时,使用
@nickname和@BalusC一样让他们自动收到有关评论回复的通知。另见meta.stackexchange.com/questions/43019/…