0

我在 websphere 门户服务器上运行的一个应用程序的主页上有一个“用户搜索”portlet,它根据搜索表单中填写的搜索条件显示匹配的用户记录。我需要在结果页面上有一个“返回搜索输入”链接,单击该链接应在输入 jsp 上显示已填写的表单。

我面临的问题是,如果我在同一个 IE 浏览器的两个不同选项卡中打开应用程序并开始提供一些搜索条件并提交,同时从另一个 IE 选项卡(在同一个浏览器中)搜索一些其他输入,然后去返回上一个选项卡并单击“返回搜索输入”链接,而不是向我显示第一个输入,它将显示我在下一个 IE 选项卡中输入的输入。

我正在通过 portlet 会话设置和获取 bean(表单 bean)。但是在同一个 IE 的两个 diff 选项卡中,它将是同一个用户会话(并且可能是同一个 portlet 会话。)

如何修复它以便两个选项卡独立保存搜索结果?


这里要注意的一件事是我可以在不登录的情况下访问这个“用户搜索”应用程序。所以在这种情况下它必须采用默认的 portlet 会话。一旦我登录然后搜索会发生什么;它会覆盖portlet 会话和http 会话吗?

4

2 回答 2

3

基本上,您的问题源于您的会话在两个选项卡中相同的事实,因此您存储的任何数据都不能期望在选项卡之间有所不同,除非您将其存储为这样。我会为每个搜索分配一个 id 并将它们存储在会话中的集合中。然后,当您绘制“返回搜索输入”按钮时,添加搜索 ID,以便您可以在构建输入页面时提取正确的搜索。

或者,您可以通过将搜索作为查询字符串发布到返回搜索链接而不是将其存储在会话中来节省服务器内存。

于 2010-06-08T18:14:50.103 回答
0

您所描述的是网络应用程序面临的一个相当普遍的问题——我认为官方术语是对话——即需要支持会话范围和请求范围之间的某些东西。

有些 web 框架支持这个概念,有些不支持。portlet 规范不支持开箱即用(尽管 websphere 中可能有一些特定的东西)。

我认为重新创建对话支持的一种方法是在生成的 HTML 中存储对话 ID。这样您就可以拥有一个每个选项卡/窗口的 ID。如果突然一个请求收到一个旧 ID,您知道它来自旧页面(如果用户使用后退按钮)或另一个选项卡。

这只是一个粗略的草图。我很确定网络上有关于这个问题的很好的资源,否则会产生另一个问题。

于 2010-06-08T18:41:26.360 回答