1

我在一个网页中有 2 个链接,一品脱链接到 appserver/?dept=1,链接二是 appserver/?dept=2。然后我有一个 JSF 阶段监听器,在那里,我可以获取后端 bean 并将 dept1 或 dept2 设置为 bean 参数,以便呈现不同的部门内容。如果用户从上面的网页启动 2 个窗口,dept1 窗口的内容可以转到 dept2 窗口。都搞砸了。(注意,如果您从桌面快捷方式启动浏览器,输入上面的链接,没问题,因为将创建 2 个会话,创建 2 个不同的后端 bean 实例)。

关键原因是 JSF 将 bean 存储在会话中,因此来自同一个父窗口的 2 个窗口共享相同的会话 id(cookie),然后使用相同的后端 bean 类实例。在渲染结果时,结果可以转到任一窗口。

我怎样才能避免这种窗口交叉内容的情况?这似乎是很久以前就应该解决的基本 Web 应用程序问题。或者我可能会做错事。

我试过接缝转换,没有帮助,JSF2.0有视图范围,CDO。剂量可以帮助吗?由于各种原因,我们还不能迁移到 JSF2.0。我正在使用 JAVA6、Tomcat6.20、Icefaces。任何帮助都是适当的。

4

3 回答 3

1

在 JSF 1.x 中,最好的选择是Tomahawk 的 <t:saveState>. 只需将其放在指定请求范围 bean 将保留在由同一页面触发的后续请求中的页面中,而不管浏览器选项卡/窗口如何。

<t:saveState value="#{bean}" />

它的作用类似于 JSF 2.0 视图范围。

于 2010-12-06T02:24:24.613 回答
0

您的问题可以通过使用 seam 对话轻松解决,您可以查看 seam 包附带的示例。您需要将支持 bean 范围更改为会话中的会话并使用页面参数。Seam in action book 也用非常漂亮和简短的例子解释了这个用例。

于 2010-12-06T07:25:58.953 回答
0

看看MyFaces Orchestra

于 2010-12-06T08:49:50.290 回答