带有选项卡式浏览的JSF会话范围bean

带有选项卡式浏览的JSF会话范围bean,jsf,tabs,richfaces,ajax4jsf,Jsf,Tabs,Richfaces,Ajax4jsf,我们有以下问题 应用程序的环境: JSF,Richfaces,a4J 考虑以下场景: 用户登录到系统 用户导航到包含a4j组件的a4j表单的新页面,用户填写表单但不提交 用户打开一个新选项卡,打开相同的URL,并用新数据填写新表单 用户返回第一个选项卡并提交信息(注意:所有bean都是在会话范围内定义的) 结果: 提交的信息是来自第二个选项卡但从第一个选项卡提交的信息,只要bean被定义为会话范围,这是预期的 问题: 我们需要获得请求范围的行为(即:尽管bean被定义为会话范围,但将新选项卡

我们有以下问题

应用程序的环境:

JSF,Richfaces,a4J

考虑以下场景:

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

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

问题:

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

注意事项:

当将bean作用域定义为请求作用域时,来自相同形式的单个组件的部分Ajax响应会重置其他组件,因为它们尚未提交

有什么建议吗

--


非常感谢

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

当然,您可以尝试使用更多自定义代码来解决此问题 但我的快速建议是使用解决这个问题的方法

Seam是JSF的超集,它为 做你想做的事的豆子

Seam本机支持richfaces(两者都是JBoss/Redhat的项目),因此
您不应该期望集成会出现任何问题。

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

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

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