0

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

假设在 page1,我有用户列表。单击用户时,我会在 page2 中获取用户的详细信息。

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

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

有没有办法为每个选项卡/窗口创建新的 sessionbean?也许在 primefaces 或 icefaces 中?


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

@ViewScoped:只要您与 浏览器 window/tab 中的同一个 JSF 视图交互,这个范围内的 bean就会存在。它是根据 HTTP 请求创建的,并在您回发到不同的视图后被销毁。


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

4

2 回答 2

1

If you are using CDI Conversation scope could help.

From the Java EE docs: ConversationScoped

These tutorials might help.

  1. CDI Conversations Part 1
  2. CDI Conversations Part 2

Hope this helps !!!

于 2013-02-27T08:54:22.093 回答
0

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

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

更多信息:

请注意,您可以加密参数(比方说,ID)来为您的参数添加一些安全性。请参阅第二个建议的链接以实现此目的。

于 2013-02-27T16:16:12.923 回答