[Seasar-user:16166] Re: 【SAStruts】removeActionFormの対象スコープについて

Yasuo Higa [E-MAIL ADDRESS DELETED]
2008年 10月 29日 (水) 13:37:08 JST


ひがです。
> 
> いつもお世話になっております。
> 茂木です。
> ちょっとあれっ?と思ったのですが
> 
> removeActionFormは、セッションスコープだけでなく、リクエストスコープのアクション
> フォームもクリアする場合があるのでしょうか?
> 
> というのも、コードなにがしの下記のサンプルにおいて、
> http://code.nanigac.com/source/wiki/view_title/597/2-1+電子カタログを作ろう<http://code.nanigac.com/source/wiki/view_title/597/2-1+%E9%9B%BB%E5%AD%90%E3%82%AB%E3%82%BF%E3%83%AD%E3%82%B0%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86>
> 
> CatalogDetailAction.javaのshowメソッドのアノテーションを
> @Execute(validator = false, urlPattern = "show/{id}")
>> @Execute(validator = false, urlPattern = "show/{id}", removeActionForm =
> true )
> とすると、
> catalogDetail.jspの中で、catalogDetailFormのプロパティを参照しても空文字になって
> しまいます(もちろん、removeActionForm = trueを除けば正常に参照できます)。
> 
> CatalogDetailAction.javaのcatalogFormプロパティはセッションスコープに格納
> されており、catalogDetailFormはリクエストスコープに格納されています。
> 

> 期待する動作としては、セッションに格納されているcatalogFormのみをクリアして
> 欲しいのですが、そういったものではないのでしょうか?
> 
@ActionFormがついているのは、catalogDetailFormなので、
catalogDetailFormはセッションから削除しますが、catalogFormに対しては
ノータッチです。

catalogDetailFormはリクエストにあるので、物理的には残っています。
しかし、Strutsのタグが参照するアクションフォームは、
実際のアクションフォームをDynaBeanでラップしたものになっていて、
このDynaBeanはremoveActionForm = trueで削除されます。

そのため、JSPからは参照することができません。

この辺の処理は、
ActionWrapperの138行目以降を見るとわかります。

catalogDetailFormがリクエストにあるなら、removeActionFormをtrueに
する意味はありません。
セッションにあるcatalogFormを削除したいということなら、
showメソッドに
@RemoveSession(name="catalogForm")
のようにアノテーションをつけてください。

よろしくお願いします。


Seasar-user メーリングリストの案内