[Seasar-user:16265] Re: [SAStruts]session 削除の取り扱いについて
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2008年 11月 10日 (月) 14:28:29 JST
ひがです。
>
> いつもお世話になっております。
> 竹内です。
>
> SAStrutsでActionのプロパティのDtoをセッションインスタンスとする場合
> @Component(instance = InstanceType.SESSION)
> を付けると思います。
>
> また、この場合にDtoを編集するとSessionの値も書き換わると思いますが
> Dto自体にnullを渡すと(恐らく参照が切れるため)
> Session自体から無くなることはないと思います。
>
ここでいっているDtoとは、アクションフォームのことですよね。
アクションで
hogeForm = null;
としてもアクションから参照がなくなるだけど、
セッションには格納されたままです。
> @RemoveSessionや@Execute等のアノテーションを利用して
> セッションを削除する方法もありますが
> そもそも参照にnull渡しを行ってsession削除出来ると
> 開発者にとっては「楽」出来ると思っております。
>
セッションへの参照とアクションへの参照をごっちゃに
考えている気がします。
アクションへの参照を切ったら、セッションへの参照も切れるというのは
おかしいですよね。もともと別のものだから。
明示的にセッションにnullを指定したほうがわかりやすいということなら、
@Resource HttpSession session;
とプロパティを用意しておいて、
session.removeAttribute("hogeForm");
してください。
これなら、普通だし問題ないと思います。
ただし、これでもセッションからPOJOとしてのアクションフォームが
消えるだけで、Strutsから実際に参照されているDynaBeanは削除されないので
<html:text property="xxx"/>
などと参照すると値が設定されます。
DynaBeanを削除するのは、SAStrutsの内部動作を把握していないと
できません。
わざわざこんなことを考えなくてもすむように、removeActionForm属性が
用意されているので、この動作に相当するAOPを作ろうとするのは、
あまり意味がないと思います。
Seasar-user メーリングリストの案内