- 2007-10-05 (金)
- 技術
1回のリクエストで複数のActionを経由する場合、Actionが呼ばれるたびにActionFormのSetter・Getterが呼ばれるので、1つ目のActionで設定した値が2つ目のActionで元に戻る場合がある。
たとえば以下のようにTest1Actionが呼ばれてsuccessのときに自動的にTest2Actionが呼ばれるように実装した場合である。
<action path="/Test1Action"
type="Action"
name="ActionForm"
scope="session"
validate="false">
<forward name="success" path="/Test2Action.do" />
</action><action path="/Test2Action"
type="Action"
name="ActionForm"
validate="false">
validate="false">
<forward name="success" path="test.jsp" />
</action>
値が元に戻ってしまうならまだ処理が落ちてしまうことはないが、例えば画面でListを持っててRequestのたびにActionFormに対してSetter・Getterが動く場合
- Test1ActionでActionFormのListSetterが動く
- Test1ActionのActionでListをプログラム側でnullにする
- Test2ActionでActionFormのListSetterが値をセットしようとしてServletExceptionが発生
たしかにnullにしたListに対してSetterが動けばそれはエラーとなってしまう。
これは画面上にはServletExceptionがドドンと表示されるので一見何が起こっているのか分かりにくい。
ただし、こういった内容を知っていればもしかしてあそこか?となるので開発のスループットは上がるだろう。
実はListがnullのときにServletExceptionが発生しない方法があるが、その機能に関しては以下がとっても読みやすい。
civic site : LazyListを使うともっと楽だった
確かにこの方法で回避できるが、忘れてはいけないのは毎回ActionFormのSetter・Getterが動くということである。思ったとおりの値が2回目のSetterで上書きされる可能性があるので実装時には十分に考慮する必要ある。
【関連する記事】
- Newer: いまさらながら脳内メーカーをやってみた
- Older: Eclipseでタブを移動するショートカット
Comments:0
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/497
- Listed below are links to weblogs that reference
- StrutsでActionを複数経由する場合の注意点 from HouseTect, JavaScripter Blog

