3

我们有以下问题...

应用环境:

JSF、Richfaces、a4J

考虑有以下情况:

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

结果:

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

问题:

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

笔记:

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

有什么建议么 ?

--

非常感谢

4

2 回答 2

2

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

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

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

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

于 2009-02-03T17:54:26.183 回答
0

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

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

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

于 2009-02-05T15:02:00.350 回答