S2StrutsをJSP1.2環境(Tomcat4.1)で使う -その5-
subversion上のtrunkにコミットされたソースをビルドして、ELInitializeTagクラスを元に戻しまして試しましたが同じ現象がおきています。ソースを見たところ、InitializeTagクラスに同じ記述を加えて頂いているようです。
コメントには、Tomcat4.1の場合だとJSPとServletでHttpServletRequestが異なるので再設定するとなっていますが、Tomcat4.1以外の方に影響はないのでしょうか。
現象をもう少し詳しく書くと下記のようになります。
1.入力画面呼び出し(entry.jsp)
2.InitializeタグでEntryInitActionの呼び出し
・セッションに値がない場合は、フォームの初期値を設定
3.入力画面の表示
※2で設定した値が表示されない
4.データを入力しPOST
5.EntryActionの呼び出し
・セッションに格納されたEntryDtoにデータが格納される
6.確認画面の表示(confirm.jsp)
7.確認画面から入力画面に戻る
8.入力画面の再呼び出し
9.InitializeタグでEntryInitActionの呼び出し
10.入力画面の表示
※5で設定した値が表示される
10の時も表示されなければ前述の箇所が原因かもしれませんが、表示されてしまうのでやっぱり使い方が悪いのでしょうか。
【追記】
EntryDtoがセッションに存在する場合は表示され、セッションにない場合は表示されないだけみたいです。InitActionにEntryDtoのgetterを作成してExportToSessionアノテーションをつけると表示されるようになりましたが、4でエラーになります。
SingletonS2ContainerFactory.getContainer().setRequestをつけてもはずしても現象に関係ないようなので、原因としては違うようです。使い方が間違っているのかな・・・。
java.lang.ClassCastException
at org.seasar.struts.interceptors.ProcessPojoFormInterceptor.lookupPojoForm(ProcessPojoFormInterceptor.java:136)
at org.seasar.struts.interceptors.ProcessPojoFormInterceptor.createPojoForm(ProcessPojoFormInterceptor.java:115)
at org.seasar.struts.interceptors.ProcessPojoFormInterceptor.processPojoForm(ProcessPojoFormInterceptor.java:85)
at org.seasar.struts.interceptors.ProcessPojoFormInterceptor.invoke(ProcessPojoFormInterceptor.java:60)
at org.seasar.struts.processor.S2RequestProcessor$$EnhancedByS2AOP$$1d121c7$$MethodInvocation$$processActionForm0.proceed(MethodInvocationClassGenerator.java)
at org.seasar.struts.processor.S2RequestProcessor$$EnhancedByS2AOP$$1d121c7.processActionForm(S2RequestProcessor$$EnhancedByS2AOP$$1d121c7.java)
at org.seasar.struts.processor.AcceptorImpl.process(AcceptorImpl.java:87)
at org.seasar.struts.processor.S2RequestProcessor.process(S2RequestProcessor.java:59)