[Seasar-user:12003] Re: [S2Struts]Actionクラスへのバインディングについて

YASUO HIGA [E-MAIL ADDRESS DELETED]
2007年 12月 9日 (日) 10:22:30 JST


ひがです。

> 湯浅と申します。
> 
> S2Strutsでの開発に関して悩んでいるところがありまして、
> 皆さまのお知恵をお借りできればと思い、投稿いたしました。
>  ※投稿内容について前提の環境は以下の通りです。
>   ・Seasar2 2.4.17
>   ・S2Struts V1.3.0-RC2 (POJO Actionクラスを使用した無設定S2Struts)
>   ・Mayaa 1.1.16
> 
> S2Strutsの仕様上、
> Test1Action.doXXX() → Test2Action.initialize()と遷移した場合、
> Test2Actionに用意したsetterメソッドに対して、S2Strutsによりバインドが行われま
す。
> (Test2Action.initialize()の実行には、<s2tmputs:init>タグを使用。)
> バインドの優先順位は、
>  1.HttpServletRequest#getParameter()
>  2.HttpServletRequest#getAttribute()
>  3.HttpSession#getAttribute()
> です。
> このため、Test1ActionからTest2ActionにRequestまたはSessionを介して値を渡そうと
した場合、
> HTTPパラメータに同名の値がいると、そちらが優先されてしまいます。
> 
> この動作は、思わぬ不具合の種にならないかと懸念しております。
> 
> 以上のように、Action間でRequestまたはSessionを介して値を渡すような
> 処理を行っている場合、その値の名前が分かれば(そんなケースは稀なのかも
> しれませんが)値を上書きもしくはnullに出来てしまうと思われます。
> 
> 皆さまはこれに対して何か対策を講じられておいででしょうか?
> 
> 個人的には、<s2struts:init>タグで実施されるバインドの優先順位を
>  1.HttpServletRequest#getAttribute()
>  2.HttpServletRequest#getParameter()
>  3.HttpSession#getAttribute()
> に変更してはどうだろうか?と思っています。(浅はかでしょうか?)
> 
S2JSFも上記のようになっているので、S2Strutsもあわせたほうがいいんじゃ
ないかなと思います。
理由はいろいろありますが、Actionでパラメータの値を変更しても
パラメータのほうが優先されるとその変更が無視されるのは、
困りますよね。


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