[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 メーリングリストの案内