0

问题是,我能否使用 Spring 或 JS 区分 2 个页面,在一个浏览器中并行打开。例如,我不想要一个情况

  1. 用户打开窗口 1,其中包含一个选项列表,存储在会话中。
  2. 用户转到另一个页面并打开窗口 2,其中包含另一个同名选项列表,它们会覆盖会话中的选项
  3. 用户转到窗口 1,使用窗口 2 中的选项提交表单,并丢失窗口 1 中的所有内容。

页面上没有登录或任何内容来帮助区分并行会话。主要是在并行页面中进行这项工作

4

1 回答 1

1

您可以为每个窗口使用不同的 id。此 id 可能来自表单中的隐藏字段,并由随机生成。


您首先在表单中添加一个隐藏字段,其中包含此表单的唯一 ID:

<input type="hidden" name="suffix" value="50bd324e7a" />

然后,将此值用作来自此表单的所有变量的后缀。会话键是字符串,因此为它们添加后缀以设置/获取值没有问题。

使用你的场景,它会像这样:

  1. 用户打开窗口 1,其中包含一个选项列表,存储在会话中。

    将后缀添加到键中的存储数据,例如变量email将存储在会话变量中email_50bd324e7a

  2. 用户转到另一个页面并打开窗口 2,其中包含另一个同名选项列表,它们会覆盖会话中的选项

    这里也是一样,但它是不同的形式,具有不同的 id,因此变量名称会有所不同。

  3. 用户转到窗口 1,使用窗口 2 中的选项提交表单,并丢失窗口 1 中的所有内容。

    在提交时,您读取隐藏字段的值并使用它从会话中获取数据。


另一种方法是直接使用那些唯一的 id 作为键,并在键下存储所有表单变量的数组。这个想法非常相似(也许代码会更干净)。

例如:

带有 id 的表单的所有变量50bd324e7a都存储(作为映射)在名为 的会话变量中50bd324e7a。因此,为了获得例如 form variable 的值email,您需要调用session.getAttribute(50bd324e7a)并从结果(这是一个映射)中获取 key 的值email

于 2013-10-27T14:36:45.510 回答