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