- PR -

子画面の処理について

1
投稿者投稿内容
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2005-11-23 13:12
みーちくと申します。
宜しくお願い致します。

《環境》
Eclipse3.0
j2sdk1.4.2_03
Tomcat4.1.29
Oracle9i
Struts1.0

現在、上記の環境で開発をしております。
入力画面で条件を入力し、OKボタンを押下すると、子画面が開きます。
子画面では、登録や計算処理等をします。
子画面で表示する項目などは、クラスにセットして、ActionFormにセットしています。

ここで質問です。
下記のような操作をした場合、初期表示は、別の表示内容になっているのですが、
B画面で計算ボタンを押下した場合、C画面の表示内容になってしまいます。
(後から表示された内容)
子画面を開いた場合に、別のsessionにすれば、良いのでしょうか?
また、別のsessionにする場合、どのような方法があるのでしょうか。
ご教授願います。
宜しくお願いいたします。

A画面(入力画面)→B画面(子画面1)
A画面(入力画面)→C画面(子画面2)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-23 13:39
「B画面で計算ボタンを押下した場合、C画面の表示内容になって」しまう条件がどのように記載されているかにようるのでなんともいません。それぞれのウィンドウでフラグをhiddenパラメータやrequestに保持させるなどすれば画面遷移の一貫性が保てるかと思います。

本当に必要があるかは別として、セッションを別にする方法はこれが参考になるでしょうか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8667&forum=12
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2005-11-23 14:31
インギさん

早速の返信ありがとうございます。

>「B画面で計算ボタンを押下した場合、C画面の表示内容になって」しまう条件がどのように記載されているかにようるのでなんともいません。

子画面(B画面とC画面)で表示する項目などはクラスにまとめております。
子画面が開いた時にActionが呼ばれ、表示クラスのインスタンスを作成し、
DB等から必要な項目をセットしております。
また、そのクラスには、計算処理や、入力項目の入れ替え処理等もあります。

今は同じsessionIDなので、同じ表示クラスを見ていると考えているのですが、
正しいのでしょうか。
上記の事を回避するために、子画面が開くタイミングでssessionIDを別にすれば、
動作するのかな?と考えております。

セッションを別にする方法を見てみたのですが、ちょっとよくわかりません。
申し訳ございません。
URLReWritingを子画面が開くActionで行うという事で宜しいのでしょうか?
具体的には、下記のような記述で宜しいのでしょうか?

Action
HttpSession session = req.getSession(false);
response.sendRedirect(res.encodeUrl("ユニークな文字列"));

宜しくお願い致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-23 15:18
encodeUrl をすると必要に応じてセッションIDがURLに織り込まれますので、セッションになります。
クッキーのかわりに URL でセッションを維持するわけです。

画面毎に別々の遷移をさせたいのであれば情報を保持しているインスタンスをそれぞれ用意してはいかがでしょう。
セッションに同じ名前で格納しているから不整合が生じるのだと思います。
これを回避するためにセッションを別にするというのは一般的に正攻法ではありません。1ユーザあたり1セッションにしましょう。
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2005-11-23 16:52
インギさん

返信ありがとうございます。

>これを回避するためにセッションを別にするというのは一般的に正攻法ではありません。1ユーザあたり1セッションにしましょう。
おっしゃる通りですね。

>セッションに同じ名前で格納しているから不整合が生じるのだと思います。
ランダムを使用して、ユニークな名前になるように、修正してみました。
思い通りの操作となりました。
明日登録処理等を、もう少しテストしたいと思います。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)