【问题标题】:JSF session scope beans with Tabbed browsing带有选项卡式浏览的 JSF 会话范围 bean
【发布时间】:2010-10-05 03:44:16
【问题描述】:

我们有以下问题...

应用的环境:

JSF、Richfaces、a4J

考虑以下场景:

  • 用户登录系统
  • 用户导航到一个新页面,该页面由一个包含 a4j 组件的 a4j 表单组成,用户填写表单但未提交。
  • 用户打开一个新选项卡并打开相同的 URL 并用新数据填写新表单
  • 用户返回他的第一个选项卡并提交信息(注意:所有 bean 都定义为会话范围)

结果:

提交的信息是来自第二个Tab但从第一个Tab提交的信息,只要bean被定义为会话范围,这是预期的。

问题:

我们需要获取请求范围的行为(即:将新选项卡作为新请求处理,尽管 bean 被定义为会话范围)。

注意事项:

当将 bean 范围定义为请求范围时,来自同一表单中各个组件的部分 Ajax 响应会重置其他组件,因为它们尚未提交。

有什么建议吗?

--

非常感谢

【问题讨论】:

    标签: jsf tabs richfaces ajax4jsf


    【解决方案1】:

    bean 需要在会话范围内的原因是什么?

    如果这只是为了获得 ajax 功能,那么您可以将 bean 更改为请求并使用 a4j:keepAlive 标记。

    a4j:keepAlive 扩展了请求范围 bean 的生命周期,然后您的 bean 实例就像在 ajax 请求的会话范围内一样。当用户打开两个相同的页面时,他们正在使用两个不同的 bean 实例。

    【讨论】:

      【解决方案2】:

      这是 Web 应用程序的一个众所周知的问题。

      当然你可以尝试使用更多的自定义代码来解决这个问题 但我的快速建议是使用 seam framework 来解决这个问题。

      Seam 是 JSF 的超集,并为 完全符合您的要求的 bean。

      Seam 原生支持 Richfaces(都是 JBoss/Redhat 的项目)所以 您不应该期望集成有任何问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-12
        • 2010-10-29
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        相关资源
        最近更新 更多