每个选项卡是否有不同的会话bean (Java/ JSF管理的bean,而不是浏览器会话)



我想要的是每个选项卡/窗口不同的会话bean。我知道会话bean工作,但我想为新选项卡创建新的会话bean。以下是我想要新会话bean的原因。

假设在page1上,我有一个用户列表。在单击user时,我在page2中获得了用户的详细信息。

现在假设我有两个选项卡。在这两个页面中都有page1.xhtml。在tab1上单击User A,在page2.xhtml上看到了User A的详细信息现在我来tab2。在tab2上,我单击用户B。我在page2.xhtml上看到了用户B的详细信息现在问题来了。现在我回到tab1并刷新page2.xhtml,我看到了用户B的详细信息,这是不正确的,因为之前我看到的是用户A的详细信息。

因此,我想要的是每个新选项卡/窗口新的sessionbean。

是否有办法为每个选项卡/窗口创建新的sessionbean ?可能是原始脸还是冰脸?


我认为ViewScope是解决方案,但事实并非如此。参考BalusC文章

@ViewScoped:只要您与浏览器窗口/选项卡中的相同的JSF视图交互,这个作用域中的bean就存在。它在HTTP请求时创建,并在回发到另一个视图时销毁。


对于SessionBean,我的意思是Java/JSF管理会话管理bean,而不是浏览器会话(历史)。

如果您正在使用CDI对话作用域,

来自Java EE文档:ConversationScoped

这些教程可能有帮助。

  1. CDI对话第1部分
  2. CDI对话第2部分

希望这有帮助!!

@ViewScoped确实是这个问题的解决方案。问题似乎是在从page1.xhtml导航时将UserX数据(id、detail或其他内容)设置为会话,然后在page2.xhtml中加载此会话数据。因此,如果这是您当前的情况,甚至CDI @ConversationScoped也不会帮助您(因为它使用cid查询字符串参数)。

为了解决这个问题,您应该对您的page2.xhtml发出GET请求,并发送userId(或其他有用的参数)来恢复您的UserX的详细信息。

更多信息:

  • 如何选择合适的bean scope?
  • 什么可以和& lt; f: viewAction>被用于?

注意,您可以加密参数(假设是ID),从而为您的参数增加一些安全性。为了达到这个目的,请参考第二个建议链接。

相关内容

  • 没有找到相关文章

最新更新