我在网页中有2个链接,将一品脱链接到appserver/?dept = 1,链接两个是应用程序/?dept = 2。然后,我有一个JSF阶段侦听器,在那里,我可以将后端bean并将dept1或dept2设置为bean参数,以便呈现不同的部门内容。如果用户从上面的网页启动2个窗口,则DEPT1窗口的内容可以转到Dept2窗口。所有人都搞砸了。 (请注意,如果您从桌面顶剪切启动浏览器,则输入上述链接,则无问题,因为将创建2个会话,则将2个不同的后端BEAN实例划定)。

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

如何避免此窗口交叉内容情况?这似乎是一个基本的Web应用程序问题,应该很久以前解决。或者我可能做错了。

我尝试了接缝转换,没有帮助,JSF2.0具有View Scope,CDO。剂量可以帮助吗?由于各种原因,我们无法移至JSF2.0。我正在使用Java6,Tomcat6.20,Icefaces。任何帮助都可以分配。

有帮助吗?

解决方案

在JSF 1.X中,最好的选择是 战斧的 <t:saveState>. 。只需将其放在指定请求示波的bean的页面中,无论浏览器选项卡/窗口如何。

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

它的作用类似于JSF 2.0查看范围。

其他提示

可以通过使用接缝对话来轻松解决您的问题,您可以查看示例附带的接缝软件包。您需要将BEAP范围更改为会话并使用页面参数的对话。 Action Book中的接缝也用非常好的示例解释了此用例。

看一眼 MyFaces乐团.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top