S2Strutsで、異なるActionのForm(POJOForm)はDIされない?
S2Struts
使用しているバージョン、一部抜粋
s2-struts-1.2.12.jar、s2-struts-tiger-1.2.12.jar、s2-framework-2.3.23.jar、s2-extension-2.3.23.jar
<form-beans> <form-bean name="aDto" type="xxx.ADto" /> <form-bean name="bDto" type="xxx.BDto" /> </form-beans> <action-mappings> <action path="/Aaction" name="aDto" type="xxxAction" scope="session" validate="false"> <forward name="ok" path="A.jsp" /> </action> <action path="/Baction" name="bDto" type="xxxBction" scope="session" validate="true"> <forward name="ok" path="B.jsp" /> </action> </action-mappings>
のように定義したような場合に、(POJOFormを使っていてscopeは、セッションで扱っています。)
/Aactionには
aDtoのセッターを用意しておくと、aDtoがPOJOFormとしてインジェクションされます。
/Bactionには
bDtoのセッターを用意しておくと、bDtoがPOJOFormとしてインジェクションされます。
このときに、/Batcionの時に、aDtoのセッターを用意しているけどインジェクション
されないのですが、これはActionに対するFormが異なるからでしょうか?
(何かが悪くてインジェクションされないのかな?)
/Bactionが実行された際に、セッションに登録されたオブジェクトを見ると、
aDtoがaDtoというkeyでセッションにあり
aDto=org.seasar.struts.interceptors.ProcessPojoFormInterceptor$SerializeBeanValidatorForm@36eb76}
として保持されています。
そのSerializeBeanValidatorFormのbeanに、aDtoのインスタンスがあります。
http://ml.seasar.org/archives/seasar-user/2007-November/011503.html
http://javadoc.n2hiroba.com/seasar.org/s2struts/1.2.12/org/seasar/struts/interceptors/ProcessPojoFormInterceptor.SerializeBeanValidatorForm.html
https://www.seasar.org/issues/browse/STRUTS-6
https://www.seasar.org/issues/browse/STRUTS-23
上記あたりを見て、
SerializeBeanValidatorFormのgetInstance() により、bDtoの型にキャストすれば
取り出せることはわかったのですが、bDtoは、どうやって取得すべきなのでしょうか?
aDtoを、diconで、セッション扱いにしないといけないのか?そうすればDIされるのか?
別のやり方法があるのか?
2008-12-06追記
セッターを記述する際に、JAVABeansの規約に基づいて書くこと。
そうすれば、異なるActionのDtoを
private XyyyyyyyyDto xyyyyyyyyDto; public void setXyyyyyyyyDto(XyyyyyyyyDto xyyyyyyyyDto){ this.xyyyyyyyyDto = xyyyyyyyyDto; }
は、よいけど、↓のように書いちゃよくない
private XyyyyyyyyDto xyyyDto; public void setXyyyDto(XyyyDto xyyyyDto){ this.xyyyDto= xyyyyDto; }