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

时间:2009-02-03 13:16:28

标签: jsf tabs richfaces ajax4jsf

我们有以下问题......

应用程序的环境:

JSF,Richfaces,a4J

考虑使用以下方案:

  • 用户登录系统
  • 用户导航到包含a4j组件的新页面,用户填写表格但不提交。
  • 用户打开一个新标签并打开相同的网址,并使用新数据填写新表单
  • 用户返回其第一个Tab并提交信息(注意:所有bean都定义为会话范围)

结果:

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

问题:

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

备注:

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

有什么建议吗?

-

非常感谢

2 个答案:

答案 0 :(得分:2)

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

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

Seam是JSF的超集,并为其引入了新的conversation scope 完全符合你想要的豆子。

Seam本地支持richfaces(两者都是JBoss / Redhat的项目)所以 你不应该指望任何集成问题。

答案 1 :(得分:0)

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

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

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