2009-02-03 80 views
3

我们有以下的问题...JSF会话范围豆,标签式浏览

应用环境:

JSF,RichFaces的,A4J

请考虑以下情形:

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

结果:

提交的信息是从所述第二标签中的信息,但是从第一选项卡,其作为豆被定义为会话范围只要预期提交。

问题:

我们需要得到一个请求范围的行为(即:应对新的标签作为一个新的请求,尽管该bean定义为会话范围)。

注:

当定义范围豆作为请求范围从单个元件以相同的形式的部分Ajax响应,因为它们尚未递交复位其它组分。

有什么建议吗?

-

非常感谢

回答

2

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

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

Seam是JSF的一个超集,它为 引入了一个新的conversation scope bean,它的功能完全符合您的需求。

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

0

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

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

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