プロが教えるわが家の防犯対策術!

JAVAのセッション変数の上書きについて

ある画面からセッションに"Data1"というキー名でデータを保存しています。

操作1、画面1で"Data1"をgetし、Data1の中身を変更後、処理の最後にこの"Data1"をセッションに保存
操作2、画面2で画面1の最後に保存したData1を使用して画面表示
操作3、画面2でボタン押下すると再度、Data1を取得して処理を行う。

上記のように別の複数の画面(同一Window)でこの"Data1"を使用するのですが
操作1の処理中(長時間かかる)に画面をCloseして、
まったく関係ない情報に対して画面2を表示すると画面表示時は画面とData1は同期が取れているのですが
操作1の終了後に"Data1"が上書きされてしまい、画面表示内容とセッション変数Data1の内容が
不一致を起こしてしまいます。
なにか良い対策方法がございましたら、ご指導お願い致します。

もうひとつ、session.getAttributeで変数取得後にセッション変数が上書きされた場合
、取得したデータには影響ありませんか?

A 回答 (1件)

Data1に関して。

画面1→画面2と遷移するわけではないのに、画面2では画面1の処理に依存しているってことなのでしょうか。
自分にはちょっとよく分からないですね。。。すみません。

>session.getAttributeで変数取得後にセッション変数が上書きされた場合、取得したデータには影響ありませんか?
これは、

String str = "auau";
session.setAttribute("auau", str);
String sesStr = (String) session.getAttribute("auau");
str = "auauauau";
System.out.println(sesStr); //この時どうなる? 1

String[] strArray = {"hoge","hogehoge"};
session.setAttribute("hoge", strArray);
String[] sesStrArray = (String[]) session.getAttribute("hoge");
strArray[0] = "hogehogehoge";
System.out.println(sesStrArray[0]); //この時どうなる? 2

という意味で合ってますか?
1は"auau"(影響なし)、2は "hogehogehoge"(影響あり)となります。
これはsession云々の話ではなく、単純に値渡しと参照渡しの違いですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!