ウィンドウごとに異なる ID を使用できます。この ID は、フォームの非表示フィールドから取得され、ランダムに生成される場合があります。
このフォームの一意の ID を保持する隠しフィールドをフォームに追加することから始めます。
<input type="hidden" name="suffix" value="50bd324e7a" />
次に、この値を、このフォームからのすべての変数の接尾辞として使用します。セッションキーは文字列なので、値を設定/取得するためにサフィックスを追加しても問題ありません。
あなたのシナリオを使用すると、次のようになります。
ユーザーはウィンドウ 1 を開き、セッションに保存されたオプションのリストを 1 つ表示します。
サフィックスをキーに追加してデータを保存します。たとえば、 variableemail
は session variable に保存されますemail_50bd324e7a
。
ユーザーが別のページに移動し、ウィンドウ 2 を開いて同じ名前のオプションの別のリストを表示すると、セッションのオプションが上書きされます
ここでも同じですが、フォームが異なり、id が異なるため、変数名が異なります。
ユーザーはウィンドウ 1 に移動し、ウィンドウ 2 からオプションを指定してフォームを送信すると、ウィンドウ 1 からすべてが失われます。
送信時に、隠しフィールドの値を読み取り、それを使用してセッションからデータを取得します。
もう 1 つのアプローチは、これらの一意の ID をキーとして直接使用し、キーの下にすべてのフォーム変数の配列を格納することです。考え方はかなり似ています (コードがよりクリーンになるかもしれません)。
例えば:
id を持つフォームのすべての変数は、50bd324e7a
という名前のセッション変数に (マップとして) 格納されます50bd324e7a
。したがって、たとえば form variable の値を取得するにはemail
、呼び出しsession.getAttribute(50bd324e7a)
て結果 (マップ) から key の値を取得する必要がありますemail
。