[s2struts-dev:49] Re: S2Struts1.3でいつくか質問

Takahiro Yuasa [E-MAIL ADDRESS DELETED]
2008年 4月 14日 (月) 14:13:13 JST


> 面倒じゃないと言いつつまだMLに流していないですけど(^^

お手すきになったらで構いませんよ~


> http://s2struts.seasar.org/ja/12xTo13x.html#LessconfigHotdeploy
> を見ると、設定ファイルで「*Dto」もprototypeにするようにしていますね。

あ!見落としてました。


> しかし、なぜprototypeなのでしょうね?
> ちょっと、理解できていません。
>
> requestやsessionにすると、Seasar2とStrutsが同じ名前で
> HttpServletRequestやHttpSessionにインスタンスを格納することがある
> と思いますが、それを避けたかったからでしょうか。

試しに
 FormCreatorのライフサイクル: request
 ActionFormのscope: request
にしてみたら、見事に落ちますねぇ(^^;
-> POJOアクションにPOJOフォームのプロパティが定義してあると、
   S2ContainerがDIを行うときに、
     PropertyDescImpl#setValue(Object target, Object value)
   で、ActionFormオブジェクトの型が合わないと言われてエラーに
   なりました。

調べてみると、value の中身がPOJOフォームではなくS2BeanValidatorFormに
なっていました。どうやら、Container管理下のPOJOフォームを、S2Strutsが
WrapS2BeanValidatorFormコマンドで上書きしてしまっているのが原因のよう
ですね。

上記のことから考えると、FormCreatorのライフサイクルとActionFormのscope
が同じになるとNGで、さりとて
 FormCreator: request、ActionForm: session や、
 FormCreator: session、ActionForm: request
としても他でトラブるから、prototypeとせざるを得ないんでしょうね。


ついでとなってしまって恐縮ですが、S2StrutsにJavaDoc追加してくださって
非常に重宝しております!
ありがとうございます<(_ _)>

-- 
Takahiro Yuasa


s2struts-dev メーリングリストの案内