我想要的是每个标签/窗口不同的会话bean。我知道会话bean工作,但我想为新选项卡创建新的sessionbean。以下是我想要新会话bean的原因。
假设在第1页,我有用户列表。点击用户后,我会在第2页获得用户的详细信息。
现在假设我有两个标签。在这两个页面中我都有page1.xhtml。 在tab1上,我单击了User A.我在page2.xhtml上看到了用户A的详细信息 现在我来到tab2。 在tab2上,我点击了用户B.我在page2.xhtml上看到了用户B的详细信息 问题就在这里。现在我回到tab1并刷新page2.xhtml,我看到用户B的详细信息不正确,因为之前我看到了用户A的详细信息。
因此我想要的是每个新标签/窗口的新sessionbean。
有没有办法在每个标签/窗口中创建新的sessionbean?在素面或冰面上可能?
我认为ViewScope是解决方案,但事实并非如此。参考BalusC article。
只要您在浏览器窗口/标签中与 相同的JSF视图进行交互,@ViewScoped:此范围内的bean 就会存在
的。它是在HTTP请求时创建的,一旦您回发到另一个视图就会被销毁。使用SessionBean,我的意思是Java / JSF托管会话托管bean而不是浏览器会话(历史记录)。
答案 0 :(得分:1)
如果您正在使用CDI会话范围可能有所帮助。
来自Java EE文档:ConversationScoped
这些教程可能会有所帮助。
希望这有帮助!!!
答案 1 :(得分:0)
@ViewScoped
是解决这个问题的方法。问题似乎是您在从page1.xhtml导航然后在page2.xhtml中加载此会话数据时将UserX
数据(id,detail或其他内容)设置为会话。因此,如果这是您当前的情况,即使CDI @ConversationScoped
也不会帮助您(因为它使用cid
查询字符串参数)。
为了解决这个问题,您应该对page2.xhtml发出GET请求并发送userId(或其他有用的参数)来恢复UserX的详细信息。
更多信息:
请注意,您可以加密参数(例如,ID)以为参数添加一些安全性。请参阅第二个建议的链接以实现此目的。