Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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
Java JSF CDI:会话范围bean最佳实践_Java_Jsf_Jsf 2 - Fatal编程技术网

Java JSF CDI:会话范围bean最佳实践

Java JSF CDI:会话范围bean最佳实践,java,jsf,jsf-2,Java,Jsf,Jsf 2,我目前正在学习JSF2.0,我很高兴这个对话范围特性的存在,这对于在同一页面上打开一个新选项卡或一个新窗口,并拥有单独的资源,而不是相互覆盖非常有帮助 但我很好奇如何以一种好的方式实现这一点,何时开始对话,何时结束对话 在我的例子中,每个JSF页面都有每个CDIBean。假设我有一个菜单,当它被点击时,这将导致a页,从a,可能导致B,B可能导致C,C可能导致D,所有这4页都连接在一个链中 可以从B或C或D bean访问A的bean属性,也可以从C或D bean访问B的属性等等 现在我很困惑:

我目前正在学习JSF2.0,我很高兴这个对话范围特性的存在,这对于在同一页面上打开一个新选项卡或一个新窗口,并拥有单独的资源,而不是相互覆盖非常有帮助

但我很好奇如何以一种好的方式实现这一点,何时开始对话,何时结束对话

在我的例子中,每个JSF页面都有每个CDIBean。假设我有一个菜单,当它被点击时,这将导致a页,从a,可能导致B,B可能导致C,C可能导致D,所有这4页都连接在一个链中

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

现在我很困惑:

  • 是否所有这些A B C D都应该 是否在对话范围内,或 也许只是一个简单的例子?因为我觉得 有时从另一个页面 在ABCD链之外,如页面 F、 它可以导航到B页, 虽然我不知道如何供应 数据还没有发送到bean B
  • 是否所有这些A B C D都应该 合二为一
  • 何时何地开始 对话,我在想 构造函数,但我不认为它是一个 好主意,因为我更喜欢开始 第一次访问时的对话 页面,而不是bean
  • 何时何地停车 对话,这样就不会有 闲置的未使用资源

请分享您的想法。

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

您描述的范围可能更适合自定义范围,如窗口范围。实施这一范围的两个项目是:

  • IceFaces有一个JSF(非CDI)
  • 尽管如此,我还是鼓励您重新思考bean结构。我自己也非常喜欢视图范围,并使用JSF2视图参数将信息从一个页面传播到另一个页面(以及从一个视图范围实例传播到另一个)


    MyFaces“查看访问”范围似乎是另一种简洁的方法,只要您浏览的页面保持对该范围的引用,bean就留在范围内。

    CDI不是标准JSF的一部分。CDI代表上下文和依赖注入(JSR-299),它涵盖了
    javax.enterprise
    package的注释。会话范围也不是标准JSF的一部分。它是JSF1.2时代JBossSeam的发明,并被JSF2.0规范作为视图范围采用,可通过
    @ViewScoped
    注释进行切换。现在,你到底在说什么?你好,巴卢斯克,谢谢你的澄清。我使用CDI这个术语只是为了说明我在使用什么,但可能这些信息与我的问题无关,我的道歉:)据我所知,@ViewScoped用于重新显示单个页面,属性将被保留。但我想从对话范围中实现的是,我可以在几个选项卡上打开同一页,每个选项卡都有自己的会话范围。因此,在选项卡上提交myBean.name上的值“albert”不会覆盖其他选项卡上的myBean.name。但是我不知道从哪里开始和结束对话。如果有4个页面,这会让我更加困惑,例如,A页面是浏览页面,用户可以搜索,B页面是详细信息页面,用户可以修改详细信息,C页面是用户可以修改子详细信息的页面,等等。如果我想在多个选项卡中打开页面A而不影响另一个选项卡,我必须使用A的bean上的对话范围。但我想这对B、C和D来说也是对话的范围?以及我应该在何时何地开始/结束对话。我的意思是,用户可以打开新选项卡,然后关闭选项卡。我如何才能检测到这一点并结束对话?Albert,在回复非评论者自己的帖子时,使用
    @昵称
    ,如
    @BalusC
    ,让他们自动获得有关评论回复的通知。再见,谢谢!我也在考虑视图范围,它也可以用于多任务或多窗口环境。您将视图参数从一个viewscope传递到另一个viewscope的意思是,通过h:button和嵌套的f:param以及带有嵌套的f:viewParam的f:metadata实现的视图参数,对吗?如果我没有弄错,h:按钮将导致GET请求,这对我来说是个问题,因为有时,例如,从B页(POST)按delete将返回到a页的导航。在这种情况下,有没有办法将视图参数从B发送到a?您可以将字符串“?includeViewParams=true”附加到导航规则,在“登录页”上定义的视图参数将自动为您包括在内。好的,谢谢。读过一次,但从未想过使用它。我想我已经习惯了会议的范围,一切都在这里。必须试一试:)CDI没有实现@ViewScope,您对CODI和Seam3有偏好吗?鉴于我是Seam 3 Faces模块的负责人,我有一个(有点偏颇的)偏好;)看看这两个项目还提供了什么,然后选择最符合您需求的项目。