strutsで、JSP→アクションクラス→JSPの遷移ができない

このQ&Aのポイント
  • strutsで、JSP→クラスの実行→JSPの遷移ができない
  • struts-config.xmlの設定が悪いのかと思ったが、問題は無さそう
  • ShoppingInitEntryActionのソースでnullを返しているため画面遷移しない
回答を見る
  • ベストアンサー

strutsで、JSP→アクションクラス→JSPの遷移ができない。

Strutsを勉強中の者です。 初心者的な質問で大変恐縮ですが、どこを調べても原因が分からなかったので、最終手段としてこちらに質問させて頂く事にしました。 どなたかご存知の方がいらっしゃいましたらご教授頂けないでしょうか。 ・概要  strutsで、JSP→クラスの実行→JSPの遷移ができない。 ・環境  WindowsXP  Eclipse3.3  Tomcat5.5  GEF3.3  struts-1.3.8  JDK1.5 ・詳細  「Eclipseパーフェクトマニュアル ベストセレクション」  という本をもとに勉強しています。  ここのStrutsの例題で  (1).簡易家計簿 <メニュー画面>(index.jsp)を表示   (2).同画面のリンク(ShoppingInitEntry.do)をクリック   (3).リンク(ShoppingInitEntry.do)に関連づけられているクラス(ShoppingInitEntryAction)の実行   (4).データ入力画面(ShoppingUpdate.jsp)への遷移  という事をやっています。  実際に設定して、動かして見ましたが、  Eclipseでデバッグを貼っていると(3)まで動作しているのが分かるのですが、(4)の画面まで遷移しません。  具体的には、ShoppingInitEntry.doのリンクが  ブラウザのアドレスバーに表示され、画面が真っ白の状態になります。  (データ入力画面は表示されない)  尚、直接(4)の画面(ShoppingUpdate.jsp)を開くと、  データ入力画面がエラーも無く表示されます。 ---- struts-config.xmlの設定が悪いのかと思ったのですが、 問題は無さそうに思います。(必要と思われる部分を抜粋) <struts-config> <global-forwards> <forward name="ShoppingInitEntry" path="/ShoppingInitEntry.do"/> </global-forwards> <action-mappings> <action path="/ShoppingInitEntry" type="MoneyBooks.ShoppingInitEntryAction" input="/index.jsp"> <forward name="success" path="/ShoppingUpdate.jsp"/> </action> </action-mappings> </struts-config> ---- (3)ShoppingInitEntryActionのソースは、下記の通りです。 public class ShoppingInitEntryAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return super.execute(mapping, form, request, response); } } 上記のreturn super.execute( ~の部分では nullを返しているようです。 Eclipseのコンソールにメッセージは表示されません。 A.原因は、struts-config.xmlでしょうか? それともクラスがnullを返している為に画面遷移しないのでしょうか?    そもそもsuper.executeのソースをjadのデコンパイルで追ったのですが、返り値としてNullしか返していない状態です。 B.また、馬鹿な質問ですが、そもそもjavaではnullを返り値で返すとオール×だと思っているのですが、この考え方は正しいでしょうか?  大変お恥ずかしい限りですが、ご存知の方がいらっしゃいましたら教えて頂きたく宜しくお願い致します。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Kilm
  • ベストアンサー率87% (7/8)
回答No.1

A. executeの返り値(ActionMapping)にnullを返した場合、他への転送を行いません。 <forward name="success" path="/ShoppingUpdate.jsp"/> ここで転送先を指定しているので、 return mapping.findForward("success"); のように 『succcess』を返せばShoppingUpdate.jspに画面が遷移すると思います。 B. オール×の意味が良く分かりませんが…返り値を受け取るメソッド次第でしょう。

javawater
質問者

補足

A. 回答ありがとうございました。できました!  B. こちらもありがとうございます。 nullを返り値として処理しているのを見た事が無かったので・・・。 (エラーは大体Nullpointer。)

関連するQ&A

  • strutsで画面遷移

    お世話になります。struts初心者です。 test1.jspから、リンクをクリックしたら、次のページ(download.jsp)へ遷移させたいのですが、「ページが見つかりません」となってしまいます。 以下のようなソースコードにしています。 どこがおかしいのでしょうか・・・・情報少ないでしょうか。わかる方いらっしゃいましたら、おしえてください。 https://xxxxx/test/test1.jsp  ↓リンククリックで下記URLになり「ページが見つかりません」 https://xxxxx/login/menu.do ------------------------------------------------------- test1.jsp ------------------------------------------------------- <html:html> <head> <script language="JavaScript"> <!-- function gonext(){ document.menuForm.menuOperation.value ="download"; document.menuForm.submit(); } --> </script> </head> <body> <html:form action="/login/menu"> <html:hidden property="menuOperation"/> <A href="javascript:gonext()"> go next </A> </html:form> </body> </html:html> ------------------------------------------------------- struts-config.xml ------------------------------------------------------- <form-beans> <form-bean name="menuForm" type="xxx.login.CMenuActionForm"/> </form-beans> <action-mappings> <action path="/login/menu" type="xxx.login.CMenuAction" name="menuForm" scope="request"> <forward name="download" path="/common/download.jsp"/> </action> </action-mappings> ------------------------------------------------------- CMenuAction.java ------------------------------------------------------- public class CMenuAction extends CxxxDLAction{ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { return mapping.findForward("download"); } } ------------------------------------------------------- CMenuActionForm.java ------------------------------------------------------- public class CMenuActionForm extends ActionForm{ String menuOperation; public String getmenuOperation() { return menuOperation; } public void setmenuOperation(String menuOperation) { this.menuOperation = menuOperation; } }

  • 教えてください:strutsのhtml:formタグがjspに展開された状態の、actionの値について

    java初心者です。 どなたか教えていただけませんでしょうか? JAVAのstrutsを使用してソフトを作成しています。 JSPに記載した「<html:form action="/authentication" focus="id"> 」 との記述が、WEB(IE)に展開されたソースを見ると、「<form name="AuthenticationForm" method="post" action="/strutsTest/authentication">」 に変換されています。 action="/authentication"と記述しているにもかかわらず、 action="/strutsTest/authentication"と展開されているのですが /strutsTestが自動的に付与されているのは、なぜなのでしょうか? なにか設定するところがあるのでしょうか? ※struts-config.xmlに指定したpathと一致しない為、404NotFoundになるので自動設定しないように変更したいのです。 ちなみに環境は struts-1.3.10 Apache Tomcat 6.0.14 Server EclipsVersion: 3.4.2 pakage名:struts プロジェクト名:strutsTest struts-config.xmlの設定   <form-beans> <form-bean name="AuthenticationForm" type="struts.AuthenticationForm"/> </form-beans> <global-exceptions> </global-exceptions> <global-forwards> <forward name="fail" path="/login.jsp"/> </global-forwards> <action-mappings> <action path="/authentication" name="AuthenticationForm" type="struts.AuthenticationAction" scope="session"> <forward name="success" path="/welcome.jsp"/> <forward name="fail" path="/login.jsp"/> </action> </action-mappings> login.jsp <%@ page contentType="text/html; charset=Windows-31J" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <html:html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/> <title>ログイン画面</title> </head> <body> <html:errors/> ID・パスワードを入力してください。 <html:form action="/authentication" focus="id"> <html:text property="id" size="16"/> <br> <html:password property="pas" size="16" redisplay="false" /> <br> <html:submit property="submit" value="送信"/> <html:reset value="リセット"/> </html:form> </body> </html:html> 動作順は、login.jsp => AuthenticationAction.class => welcome.jsp です。 よろしくお願いします。

  • strutsのactionクラスで遷移先のBeanを取得する方法

    現在strutsを使用しているのですが,どうしても遷移先のBeanを取得出来ません。 状況としまして、JSP画面が2つあり(仮に画面A,Bとします)、画面Aから画面Bに遷移をしようとしています。 そして画面Aに使用しているプロパティ値を、画面Bにあるプロパティにセットした状態で表示したいのです。 現在actionクラスで画面Aのプロパティ値は、struts-configでnameを画面Aのbean名にすることで、取得できています。 しかし画面Bのbeanのプロパティにセットする際には、actionクラスの引数であるActionFormは画面Aのbeanを指定しているため、使用できず、新たに画面Bのbeanを呼ぶ必要があるのですが、その取得方法がわからないのです。 説明がわかりにくいかもしれませんが、その際は御指摘下さい。 宜しくお願いします。

    • ベストアンサー
    • Java
  • strutsで、任意の画面からの任意のURLを受け付けた時の処理がしたい。

    strutsを勉強中の者です。 strutsで、  (1)a.jsp→(2)b.do→(3)b.class→(4)c.jsp という画面遷移はできるようになったのですが、(現在b.doとb.classは同じ名前にしています。) 任意の画面からの呼び出しで、  (1)*.jsp→(2)*.do→(3)b.class→(4)c.jsp とし、(2)で入力された任意のURLを(3)で解析し、そのURLによって(3)内部での処理を分岐したいのです。 ちなみに、struts-config.xmlの定義で、 <action-mappings> <action className="test.ShowMain" path="/ShowMain" input="/jsp/html/*.jsp"> <forward name="success" path="/jsp/html/main.jsp"/> </action> </action-mappings> と、*を使って編集しようとしても、 画面に、HTTPステータス 500 が表示され、 コンソールには、 ---- 致命的: End event threw exception java.lang.NoSuchMethodException: No such accessible method: addForwardConfig() on object: test.ShowMain 2008/08/17 10:43:13 org.apache.struts.action.ActionServlet handleConfigException 致命的: パス /WEB-INF/struts-config.xml に対するリソース読み込みエラー java.lang.NoSuchMethodException: No such accessible method: addForwardConfig() on object: test.ShowMain 情報: サーブレット action を利用不可能にマークします 2008/08/17 10:43:13 org.apache.catalina.core.StandardContext loadOnStartup 致命的: サーブレット /test がload()例外を投げました javax.servlet.UnavailableException: パス /WEB-INF/struts-config.xml に対するリソース読み込みエラー ---- と表示されてしまいます。 環境は、  WindowsXP  Eclipse3.3  Tomcat5.5  GEF3.3  struts-1.3.8  JDK1.5  「Eclipseパーフェクトマニュアル ベストセレクション」  という本をもとに勉強しています。 a.こうした任意のページを受信する、という方法はStrutsで可能なのでしょうか? b.可能である場合、どのような方法を取れば良いでしょうか? どなたかご存知の方がいらっしゃいましたら教えて下さい。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • Strutsで画面開設時に・・・

    Strutsで画面を開設時に ボタン等を押下することなく 結果一覧を表示させる方法はありますでしょうか?? 前の画面から遷移するためのボタンを押下した時ではなく、 画面が開いた時に、結果一覧を表示させる操作がしたいのです。 struts-config.xmlをどうにかいじって Action.classのexecute()を ボタン等の操作なくJSPファイルに読み込む方法ないですかね・・・・。

    • ベストアンサー
    • Java
  • strutsのactionタグinput

    strutsのvalidatorを使用するため 「struts-config」のactionタグに以下の修正を入れると思います。  ・validate = true  ・input  = "エラー時に遷移するページ" 上記の修正後、実行すると 画面の初期表示時に、どうやらinputで指定した画面に遷移してしまいます。 エラー時に遷移するための指定かと思ったのですが 画面初期表示時にも読み込まれるのでしょうか? 画面表示で分割して表示している所為でしょうか? ・validatorでのエラーはポップアップで表示したいと思っています。 ・該当する1画面表示に対しての配置は以下になります。  (1)Menue.html   -(2)Top.jsp※共通なヘッダ部分   -(3)Main.html     -(4)Init.jsp※検索結果表示部分     -(5)Search.html       -(6)Search_Up.html※上部の表示部分       -(7)Sarch_In.jsp※検索条件入力部分 ※初期表示は(1)の画面で、validatorを使用するのは(7)の画面です。 (7)の画面には以下を追加しました。  追加⇒<html:javascript formName="対象Form名"/>   <html:form action="actionのpath名.do?   action=search" method="post" target="view"  追加⇒onsubmit="return validate対象Form名(this)"> 1つの画面に対して細かく資産を分けてしまうと validatorを利用する際にうまく画面遷移が出来ないのでしょうか?

  • struts java ログインのセッション情報を確認するには?

    struts java ログインのセッション情報を確認するには? Login.jspからログインボタンを押下(この時にセッション情報を取得)して、画面遷移をしてB.jspに行きます。 この時にBAction.javaでセッション情報をB.jspが表示される前に取得したいのですがどうすればいいのでしょうか? B.jsp画面が表示される前に、セッション情報を取得してセッション情報があるかないかの判定を行いあればB.jspを表示してなければログイン画面を表示しようと考えています。 BAction.javaに記述したい処理です。 HttpSession session = request.getSession(false); if ( session.getAttribute("sessionInformation") != null ) { System.out.println("セッション有効") ; return mapping.findForward("success"); } else { //論理名"error"に該当するページへ移動(struts-config.xmlを参照) return mapping.findForward("errorSession"); } この処理をActionクラスにどのように記述すればいいのでしょうか? struts-config.xmlファイルの内容 <action <forward name="errorSession" path="/Login.jsp" /> <forward name="success" path="/B.jsp" /> </action> です。 URL直打ちをしてB.jspにアクセスしようとしたときに、セッション情報をもっていない為、上記のelseになり、ログイン画面に遷移しようと考えております。 かなりネットで調べましたが全く分かりませんでした。

    • ベストアンサー
    • Java
  • struts2 例外時にエラー画面に遷移しない

    struts2でStruts.xmlに例外が発生した場合はError.JSPに遷移するように指定しました。 Actionクラス上で発生した例外はError.JSPに遷移するようになりましたが interceptorで発生した例外はTomcatのエラー画面に遷移してしまいます。 これは仕様なのでしょうか?

  • 遷移先の判定?

    ヘッダーのように全画面共通の部分があってそこでフォームを作ってsubmitをして遷移した際に、表示中の画面を再描画というか表示中の画面に遷移したいんですができるものでしょうか。 forwardの際にnullを渡して遷移しないようにすればいいのかと思ったのですが、真っ白になったのでうまくいきませんでした。 struts-config.xmlのヘッダーアクションのforwardタグで全画面の設定を記述しておいて、ロジック側で遷移元パスを取得して振り分け判断?とかするんでしょうか。それだと画面数が増えると大変そうなのですが何かいい方法があれば教えてください。 質問が下手で伝わりにくいようでしたら申し訳ありません。 Strutsは1.1を使用しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • ☆Struts ActionServletの内部動作について

    Struts勉強中のものです。教えて下さい♪ struts-config.xmlより抜粋... <form-bean name="loginForm" type="jp.co.struts.LoginForm"/> <!----> <action-mappings> <!--Add action --> <action path="/login" name="loginForm" type="jp.co.struts.LoginAction"> <forward name="success" path="/jsp/loginSuccess.jsp"/> <forward name="error" path="/jsp/loginError.jsp"/> </action> </action-mappings> 以下URL画面の中段の画像の説明であるのですが、 (http://www.itmedia.co.jp/enterprise/0310/06/epn03_4.html) ActionServletは、struts-config.xmlを参照して、ActionFormクラスを処理した後にActionクラスを実行する内容の記載がありますが、内部的にはまず、Actionクラスを判別してから、nameで紐付けてActionFormクラスを判別しているのでしょうか?? 上記のstruts-config.xmlを例に具体的に言いますと。 まず、login.doが実行された場合、 <form-bean name="loginForm" type="jp.co.struts.LoginForm"/> には、path="/login" の属性がないので、まず、 <action path="/login" name="loginForm" type="jp.co.struts.LoginAction">を読み込んで、name属性とひもづく、form-beanのtype(type="jp.co.struts.LoginForm")に設定されたクラスを処理しているのでしょうか?? なぜ form-bean にpath属性を作って、login.doが実行された際に適切なform-beanを判別するようになっていないのかが疑問です・・・・ わかりずらい説明で申し訳ないですが。ご教授下さい。 また、このへんの説明が詳しく書いている本、サイト教えて下さい。 頑張ってStrutsを深く理解していきたいです♪

専門家に質問してみよう