2014-12-03 55 views
0

如果用户在具有相同会话的浏览器上打开多个选项卡,我在这里有一些问题。多个选项卡上的同一会话

  1. 用户打开的选项卡1,导航交易1001点的细节
  2. 右键点击并打开同一浏览器的另一个选项卡中,导航交易1002点的细节
  3. 回到标签1,并修改交易1001点的细节。相反,交易1001细节被交易1002细节覆盖。

我正在使用WebSphere 8.0。该页面是请求范围的。

任何建议什么是一个好的和容易维护的解决方案,以防止这种情况?

回答

4

您正在将会话/ cookie中的事务细节保存起来,这是一个糟糕的主意,应将ID等作为隐藏字段传递给表单。

+0

我同意,你应该使用ID(主键)来确定提交表单时应更新的对象。 – 2014-12-03 09:46:56

+0

@Ankit Gupta我该如何做到这一点? – bittersour 2014-12-03 09:48:45

+0

你使用任何框架,jsf等?如果您手动创建表单,则可以添加隐藏类型的输入字段并将该ID作为值传递。 – 2014-12-03 09:53:28

0

对于Ankit的投票,当您打开一个新标签页时,请确保您有一个特定于标签的ID作为隐藏的输入字段,例如产品ID。

从这里开始,你可以采用两条路径,无状态方法,根本不使用会话,从数据库中加载所有内容,更新,保存。无状态是一种幸福,如果你能支持它的完美。 第二种方法假定您使用特定于选项卡的ID从会话中检索正确的日期,换句话说,特定于选项卡的ID将成为会话密钥的一部分。

后面的方法意味着你已经启用了一个对话范围,既然你提到你正在使用JSF,那么对于对话提供支持,请查看文档@ConversationScoped。重点线是

Any JSF request has exactly one associated conversation. 

具体例子取决于你使用的,应在网上找到很多例子实施,我的想法只是让你知道它的支持

相关问题