[Seasar-user:16725] Re: SAStrutsでのSESSION使用方法について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 1月 22日 (木) 19:00:20 JST
小林 (koichik) です.
Date: Thu, 22 Jan 2009 18:29:12 +0900
From: aaa aaa <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:16724] RE: RE: Re: SAStrutsでのSESSION使用方法について
> 解決済みだと思ってたのですが、動作確認していたところ
> SESSIONスコープに格納されていなかったようです。
>
> Dtoという名称でないとだめとかですかね?
そうですね.
Seasar2 にコンポーネントとして管理されるには,
・dicon に登録する
・SMART deploy で自動登録される
のいずれかが必要です.
dicon に登録するならアノテーションは不要なので,
ここでは SMART deploy で自動登録するとします.
SMART deploy で自動登録されるには,SMART deploy の
規約に従う必要があります.
http://s2container.seasar.org/2.4/ja/DIContainer.html#SMARTdeploy
クラス名は用途ごとに決められており,ログイン情報なら
Dto となります.FQN だと
<root>.dto.XxxDto
です.よって,
@Component(instance = InstanceType.SESSION)
public class LoginDto implements Serializable {
としてください.
また,Service では
public Map sessionScope;
として HttpSession をラップした Map を
受け取るようにしてください.
そして作成した LoginDto のインスタンスを
loginDto という名前で Map に追加してください.
sessionMap.put("loginDto", loginDto);
これで LoginDto がセッションに含まれます.
> 本設定で、Actionでは以下のような取り出し方法をしております。
> -------------------------------------------------------
> @Resource
> private LoginData loginData;
> -------------------------------------------------------
Service が LoginDto をセッションに追加した
リクエストよりも後のリクエストであれば,これで
LoginDto が DI されるようになります
(クラス名は LoginDto に,フィールド名は
loginDto にしてください).
ただし,Service を呼び出す前にこのフィールドが
null だった Action では,Service の呼び出しから
戻ってきた後もこのフィールドは null のままです.
Service を呼び出した Action で LoginDto を
取得するには,Service と同じように
public Map sessionScope;
を用意して,loginDto という名前で get()
してください.
loginDto = (LoginDto) sessionScope.get("loginDto");
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内