- 締切済み
return new ActionForward("xxx.do",true);による画面遷移
tomcat、struts、mysqlで作成したアプリケーションなのですが・・・ 画面Aからリンクをクリックし画面Bへいく動作がたまに(頻繁ではありません。)おかしくなります。 画面Aからリンクをクリックすると、画面Bではなく、アプリケーションの一番始めの画面(index.jsp)へとんでしまいます。 おかしくなる条件はつかめていません。 index.jspの中身 response.sendRedirect("./tologin.do"); 画面A(A.jsp)のリンク ●<a href="open.do?・・・・" →open.doによって呼ばれるアクション ●ActionA.java →ActionA.javaにかかれている遷移先 ●return new ActionForward("next.do",true); →next.doによって呼ばれるアクション ●ActionB.java →ActionB.javaにかかれている遷移先 ●return mapping.findForward(SUCCESS); →画面B(B.jsp) という流れになっています。 tomcatのログを見ると・・・ *********** 正常なとき ******************** 日付 StandardContext[/application]: Mapped to servlet 'jsp' with servlet path '/jsp/A.jsp' and path info 'null' and update=true 日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/open.do' and relativeURI='/open.do' 日付 StandardContext[/application]: Trying exact match 日付 StandardContext[/application]: Trying prefix match 日付 StandardContext[/application]: Trying extension match 日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/open.do' and path info 'null' and update=true 日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/next.do' and relativeURI='/next.do' 日付 StandardContext[/application]: Trying exact match 日付 StandardContext[/application]: Trying prefix match 日付 StandardContext[/application]: Trying extension match 日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/next.do' and path info 'null' and update=true 日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/jsp/B.jsp' and relativeURI='/jsp/B.jsp' *********** 異常なとき ******************** 日付 StandardContext[/application]: Mapped to servlet 'jsp' with servlet path '/jsp/A.jsp' and path info 'null' and update=true 日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/open.do' and relativeURI='/open.do' 日付 StandardContext[/application]: Trying exact match 日付 StandardContext[/application]: Trying prefix match 日付 StandardContext[/application]: Trying extension match 日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/open.do' and path info 'null' and update=true 日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/' and relativeURI='/' 日付 StandardContext[/application]: Trying exact match 日付 StandardContext[/application]: Trying prefix match 日付 StandardContext[/application]: Trying extension match 日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/' and path info 'null' and update=true 日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/jsp/index.jsp' and relativeURI='/jsp/index.jsp' となっていて、パスが抜けてしまっているようです。 何度ログインをし直しても、同じ状態が繰り返され続けました。 tomcatの再起動をしても解消されず、何度か繰り返した後、ログイン画面を呼び出すパス(tologin.do)を手打ちして呼び出されたログイン画面からログインをしたところなぜか正常に戻りました。 return new ActionForward("next.do",true);がいけないのでしょうか? ちなみにreturn new ActionForward("next.do",true);をreturn new ActionForward("",true);とすると、異常な時と同じようなログが出力されます。 よくわからないのですが、return new ActionForward();で遷移するのと、return mapping.findForward();で遷移するのの違いは何でしょうか? アドバイスよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chomakichi
- ベストアンサー率57% (22/38)
回答がつかないのでちょっと一言 ActionForwardを生成して遷移させたことが無いのでよくわかりませんが、strutsのjavadocには 「このクラスが既存のアプリケーションが使用している公開されたAPIの一部であるという事実がなければ、 このクラスの使用は推奨されずに org.apache.struts.config.ForwardConfig に置き換えられていたでしょう。」 とあります。 あまり推奨されてないようですので、ActionForwardを使わないという手段は取れないのでしょうか?
お礼
そうですね・・・ 他のところとは別にあえてそこだけActionForwardで遷移させているので、何か意味があるのかと思ったのですが。よくわからず困っています。 何か考えてみようと思います。ありがとうございました。