- PR -

Sessionへ登録したあとに登録データを使う

投稿者投稿内容
Sum+Go
常連さん
会議室デビュー日: 2006/03/11
投稿数: 40
投稿日時: 2006-07-26 10:41
setビーンに格納した後の処理について教えてください。
Aサーブレット上でGuestクラス中のsetビーンにデータを格納し、Sessionへ登録しました。
(参考)****************
ChkBean guest = null;
guest = (ChkBean)Beans.instantiate(getClass().getClassLoader(),〜);(途中省略)
guest.setMLB(comet); ※cometはgetParameterで取得した値
(途中省略)
session.putValue("ChkBean",guest);
************************

BサーブレットにてAサーブレットで登録したデータを持ってきたいのですが、
どのようにしてgetMLB()をもってくるかわかりません。セッションにオブジェクトを格納した際、getはどのようにしてひっぱってこればいいのでしょうか。
よろしくお願いします。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-07-26 17:18
http://www.ingrid.org/jajakarta/servletapi/servletapi-4.0/docs-ja/javax/servlet/http/HttpSession.html

サーブレットのバージョンは何ですか?
最近のであればHttpSession#getValue/putValueを使うのはやめましょう。

で、
HttpSession#getAttributeで取得すればOKという話かな。
Sum+Go
常連さん
会議室デビュー日: 2006/03/11
投稿数: 40
投稿日時: 2006-07-26 20:33
かつのりさんアドバイスありがとうございます。getValueを利用しようとしましたが、どうやらサーブレットのバージョンが古くてputValueしか使えなさそうでした・・・

HttpSession#getAttributeについてですが、参考図書やサイトを見ると
String thing = request.getParameter("mono");
setAttribute("DISLIKE", thing);
などのように"DISLIKE"一つに対して"thing"(パラメターで取得したmono)の一つの意味しかないようですが、thingのところを、上記でいうと
ChkBeanクラスのオブジェクト(guest)を指定することはできないのでしょうか?
イメージとして、ChkBeanクラスに格納したsetXXXメソッド内の値をgetXXXメソッドを用いて他のサーブレット上で使いたいのです。。

説明不足な点があると思いますが、よろしくお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-07-26 21:03
setAttributeの2番目の引数は文字列ではなくObject型です。
つまり何でもセットできるわけです。
先ほど提示したドキュメントをもう一度見てみましょう。
Sum+Go
常連さん
会議室デビュー日: 2006/03/11
投稿数: 40
投稿日時: 2006-07-27 10:38
ご回答ありがとうございます。
セッションからオブジェクトをやっと取り出すことが出来ました!

度々申し訳ないのですが、また質問がございます。
ログにてセッションからオブジェクトを確認したところ、格納したBEANクラスにパスが一緒に付いてました(comp.abc.common.ChkBean)。BEANのgetメソッドを使用して、データの取得を試みたいのですが、どのように取得するのでしょうか?
BEANクラスのインスタンスを作って、getメソッドを使用するのでしょうか。
Sum+Go
常連さん
会議室デビュー日: 2006/03/11
投稿数: 40
投稿日時: 2006-07-27 11:06
追加なのですが、ふと、「Sessionに登録したクラス(beanクラス)オブジェクトは、クラスの中にあるメソッドとか関係なしに、クラス名そのもの(名詞として)を登録してあるのではないか」と考えたのですが、間違えですか?
オブジェクト思考っていうくらいだから、Sessionに登録したクラスオブジェクトの内部メソッドも使えると思うのですが。。
すいません。周りにjava経験者がいないので、変な質問をしてしまって。。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-07-27 11:13
引用:

Sum+Goさんの書き込み (2006-07-27 10:38) より:
ログにてセッションからオブジェクトを確認したところ、格納したBEANクラスにパスが一緒に付いてました(comp.abc.common.ChkBean)。


パスって何ですか?
どうやってログにてセッションからオブジェクトを確認したんですか?

引用:

BEANのgetメソッドを使用して、データの取得を試みたいのですが、どのように取得するのでしょうか?
BEANクラスのインスタンスを作って、getメソッドを使用するのでしょうか。


そのBEANの型にキャストして使えないのですか?
じゃぁカルタ!
会議室デビュー日: 2004/11/25
投稿数: 2
投稿日時: 2006-07-27 11:23
横からスミマセン

セッションから取り出したオブジェクトのメソッドを
使うことは可能です。

もしかして、キャストを行われていないのではないでしょうか?

//〜〜 ServletA 〜〜
//オブジェクトを生成
HogeBean bean = new HogeBean();
//名前をセット
bean.setName("hiroshi");
//セッションに格納
// KEYは、"hogeKey"
session.putValue("hogeKey", bean);

//〜〜 ServletB 〜〜
//セッションから取得
//オブジェクト型として保持されているので、キャストが必要。
HogeBean bean = (HogeBean)session.getValue("hogeKey");
~~~~~~~~~~
//セッションから取得した、HogeBeanのメソッドを使って名前を取得
String name = bean.getName();

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