• 締切済み

エラーページ遷移後に入力値を残す

いつも参考にさせて頂いています。 strutsでアプリを作っています。 入力チェックをして不備があるとstrutsの<html:erros />タグにてエラーメッセージを表示しているのですが、その際に入力した値を残す処理ができなくて困っています。 私が思っていたのはrequestスコープにActionFormの値を設定すればいいのかな?と思っていたのですがうまくいきません。 (画面遷移、エラーメッセージ表示はできていますが、入力された値は消えてしまいます) 以下にソースの載せますのでご教授宜しくお願いします。 ■postでリクエストを投げるjsp <form action…> <input type="text" name="requestDto.nameKanji"> </form> ■値を取得したサーブレット //パラメータをアクションフォームから取得 TestActionForm actionForm = (TestActionForm)form; ActionMessages messages = new ActionMessages(); // 入力チェック inputCheck(actionForm, messages); // エラー処理 if(messages.size() != 0) { saveErrors(request, messages); ActionForm form = new ActionForm(); form.setRequestDto(actionForm.getRequestDto) // ここでアクションフォームをリクエストスコープに設定 request.setAttribute("ActionForm ", form); return ( mapping.findForward("error") ); } リクエストスコープに入れる名前、もしくは値が間違っているのでしょうか? どうか宜しくお願いします。 開発環境 jdk1.4_12 tomcat5.0 struts1.2

  • Java
  • 回答数4
  • ありがとう数2

みんなの回答

noname#49428
noname#49428
回答No.4

inputのvalue属性に何も指定してないのに表示される訳ないでしょ。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

エラーページからforwardで元のページに戻れれば、requestスコープでも問題ないので、 エラーページの作り方次第なのかな? と思います。 でも、基本はやっぱり、セッションスコープに入れるんじゃないかなあ? requestスコープだろうがsessionスコープだろうが removeAttribute してますよ<私(笑)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

request.setAttributeだったら、スコープとして、エラーページからの遷移だと消えちゃうんじゃないかなあ? セッションスコープに入れてみたらどうですか? request.getSession.setAttribute

pgBeginImo
質問者

お礼

回答ありがとうございます。 セッションは開放など考慮にいれないと駄目なので使わない前提です。

noname#49428
noname#49428
回答No.1

JSPでは、Strutsのhtmlタグを使ってみてください。

pgBeginImo
質問者

お礼

回答ありがとうございます。 htmlタグを使わないと駄目でしょうか? できたら使いたくはないのですが…他に方法はありませんでしょうか? 宜しくお願いします。

関連するQ&A

  • StrutsのFormについて

    現在Struts(1.2)にてプログラムしているのですが、 分からない点があります。 とりあえず入力画面と入力画面表示時に必要なデータを取得してくる Actionクラスを作りました。 必要なデータとは、セレクトボックスの値でDBから取得しております。 で、取得したデータをActionクラスのexcute()が呼ばれたタイミングで、ActionFormの生成を(new)してそれにDBから取得した値をいれて 最後にrequest.setAttribute()で設定しています。 これは間違いでしょうか? というのも、Actionクラスのexcute()のところで、 request.getAttribute("XXXform",xxForm)としてやると、 Formが取得できます。本来はこのFormに設定するべきなのでしょうか? request.setAttribute()をしていないのにFormがあることに混乱しております。 単にstruts-config.xmlでFormの定義をしたら勝手に作成される ものなのでしょうか? なんだか言ってることが分からなくなってきた、、 言いたいことをまとめると、、 今は入力画面初期表示のために自分でActionFormをexecute()の はじめでNEWしてそれにデータをいれてrquestに設定しているが、 本来は既にrquestにあるFormをgetしてそれにデータをいれて再度、 rquestに設定するのが正しいのかどうかです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • strutsのstruts-config.xmlでのエラーメッセージ

    こんばんは strutsのエラーメッセージ表示で困っています。 javaでthrowしてstruts-config.xmlのexceptionで エラーを表示します。 以下のようにコーディングしてあり、 key999に定義してあるメッセージを表示することはできます。 しかしmessagesにセットしたメッセージを表示することができません。 messagesにセットしたメッセージを表示するにはstruts-config.xmlの keyはどのように設定すればよいのでしょうか? よろしくお願いします。 *struts-config.xml <exception key="999" type="myException" path="xxxxxxxxxx.jsp" handler="myExceptionHandler"/> *java public ActionForward hoge( ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res ) throws Exception { try { return map.findForward("XXXXX"); } catch (myException e) { ActionMessages messages = new ActionMessages(); messages.add("error" ,new ActionMessage("001","エラー")); saveMessages(req,messages); throw e; } }

  • 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; } }

  • list<クラス名> とは何でしょうか?

    JAVA初心者のものです。 新規プロジェクトに向けてJAVAの習得に励んでおり、現在は「プロになるためのWeb技術入門」という本でフレームワークについて勉強しています。 ところでその本の中で次のコードがありますが、ここで List<ProductItem> は何を意味するものでしょうか? ご存知の方は教えてください。 なお、ProductItem は別の箇所で定義されたクラス名です。 public class ItemListShowAction extends Action { /* (non-Javadoc) * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ProductLogic productLogic = new IbatisProductLogic(); List<ProductItem> productList = productLogic.getProductList(); request.setAttribute("productList", productList); return mapping.findForward("show"); } }

    • ベストアンサー
    • Java
  • Servletでcsvファイル読込

    Servletからcsvファイルを読込む処理を作成しています。 しかし、FileNotFoundExceptionが発生してファイルを読込めません。 下記のように記述した場合、csvファイルはどこに置けばよいのでしょうか? いろいろファイルの置き場所を変えてはやってみましたがダメでした。 package action; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class MemberEntryAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try { // 入力ストリームを作成。 FileReader fr = new FileReader("a.csv"); BufferedReader br = new BufferedReader(fr); // 読込みループ。 String line; // 読み込まれた1行。 while( (line = br.readLine()) != null ) { System.out.println(line); } // 入力・出力ストリームを閉じる。 br.close(); fr.close(); } catch ( FileNotFoundException e ) { System.out.println("FileNotFound!"); } return mapping.findForward("memberMenu"); } }

  • ActionForm form にnullが入ってくる原因

    import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public ActionForward execute( ActionMapping map , ActionForm form , HttpServletRequest request , HttpServletResponse response ) throws ServletException, IOException, ClassNotFoundException, SQLException { という記述をして このソースで落ちる原因を調べたら、ActionForm form の "form" でnullが入ってきていました。 なにか定義し忘れているのでしょうか?

    • ベストアンサー
    • Java
  • iアプリ開発の際のDB値取得方法について

    iアプリのサイトを作成しているのですが、DB(Postgres)に値を投げて(リクエストで)処理させて値を取得して・・・といった処理を行いたいのですが、どのように記述していけばよいのかわかりません。 PCのWebサイトなんかですと、Strutsのアクション内で HttpRequestクラスでrequest.get~・・・で取得できますよね。 iアプリでStrutsと連携しているPostgresから値を投げたり取得したりするにはどのようなやり方をすればよいのでしょうか。 拙い文章で意味が分かりにくいかと思いますが よろしくお願いします

    • ベストアンサー
    • Java
  • strutsのhtml:linkの使い方

    html:linkを使用してJSPを表示した際に、前のフォームのプロパティ値(ここではstaffNumberの値)を取得したいのですが,うまくいきません。 同じ処理をhtml:submitで実行すると取得できています。 その違いを教えて頂きたいのです。 以下がそのコードです。 【struts-config】 <form-bean dynamic="true" name= "loginForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name = "staffNumber" type= "java.lang.String" /> </form-bean> <action name="loginForm" path="/login" scope="request" type="login.action.LoginAction" validate="false"> <forward name="success" path="/login.jsp" /> </action> 【login.jsp】 <html:form action="/login">  <html:text property="staffNumber" size="10"maxlength="8"/> <html:link action="/login">testlink</html:link> <html:submit value="test"/> </html:form> 【LoginAction】 public class LoginAction extends Action{ public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception{ DynaValidatorForm loginForm =(DynaValidatorForm) form; String staffNumber=(String)loginForm.get("staffNumber"); System.out.println(staffNumber); return (mapping.findForward("success")); } } linkの処理で同じJSPを表示していますが,前のプロパティ値を取得しているかをログで確認する事を優先しているのでそのようにしています。 質問の意味がわからない、ソースの不足等ありましたら御指摘下さい。 宜しくお願いします。

    • ベストアンサー
    • Java
  • html:linkでリンククリック時に画面入力値を取得してアクションへ渡す方法

    Strutsを使用したログイン画面を作成しています。ID・パスワードを入力して、html:linkをクリックしてログインするという処理を行いたいです。 そこで、リンクをクリックした際にJSPに記述しているhtml:textとhtml:passwordの値を取得して、Actionへ渡し、その情報を元にDBへの問い合わせを行いたいのですが、html:linkで複数パラメータを渡す方法が分からないので教えていただきたいです。 過去質も参考にしてみましたが、今回の質問に的を得た内容がなかったので質問させていただきました。 参考にした方法 (1)JavaScriptのonclickイベントでサブミットさせる ⇒例えばdocument.form.submit();と書けそうだが,html:formにはname属性がないため、formの指定ができない?! (2)Mapを利用してパラメータを渡す ⇒JSP内にMap設定のロジックを書く。Map(name,value)の形式で、value部分(画面入力値)はどうやって取得するのか分からない。 【struts-config】 <action-mappings> <action path="/login_Anken" type="action.Login_Anken_Action" name="login_Anken_Form" validate="true" input="/pages/Login_Anken.jsp" scope="request"> <forward name="success" path="/pages/MainMenu.jsp"/> <forward name="fail" path="/pages/Login_Anken.jsp"/> </action> 【Login_Anken.jsp】 <html:form action="/login_Anken" > <table border="0" width="100%" > <tr> <td class="pname" colspan="4" > ****システム </td> </tr> <tr> <td colspan="4"> <hr size="5" width="100%" noshade> </td> </tr> <tr> <td class="gname" colspan="4" > ログイン </td> </tr> <tr> <td colspan="4" > <hr size="5" width="100%" noshade> </td> </tr> <tr> <td width="25%" >&nbsp; </td> <td class="login"> ユーザID </td> <td width="20%""> <html:text property="userId"/> </td> <td width="20%">&nbsp; </td> </tr> <tr> <td width="25%" >&nbsp; </td> <td class="login"> パスワード </td> <td width="20%""> <html:password property="password" /> </td> <td width="20%">&nbsp; </td> </tr> <tr> <td width="10%" align="center" colspan="4" > <html:link action="/login_Anken" name="map">ログイン </html:link> </td> </tr> </table> </html:form> 【Login_Anken_Action.java】 public class Login_Anken_Action extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionMessages errors = new ActionMessages(); //画面入力値を取得 Login_Anken_Form loginAnkenForm = (Login_Anken_Form) form; boolean isSuccess = false; Login_Anken_Business business = new Login_Anken_Business(); String userName = null; userName = business.getLoginUserName (loginAnkenForm.getUserId(), loginAnkenForm.getPassword()); //ユーザが存在すればログインOK isSuccess = (userName != null); if (isSuccess) { //TODO HttpSession session = request.getSession(); session.setAttribute("name", userName); return mapping.findForward("success"); } else { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.login")); saveErrors(request, errors); return mapping.findForward("fail"); } } }

    • ベストアンサー
    • Java
  • テキストフォームの未入力チェック

    お世話になります。 Javascriptでテキストフォームの入力チェックを行っております。 テキストフォームにはDBから取得した値が入っており、その値を変更して更新できるプログラムを作ろうとしています。 テキストフォームが未入力だった場合に元の値を入れてPOSTリクエストを投げたいのですが方法が分かりません。 (よく見かける未入力だったらアラートを出すというのは出来るのですが・・・) 以下ソースの抜粋になります。 function check(){ for(i=0; i<document.iform1.length;i++){ if(document.form1.elements[i].value==""){ document.iform1.elements[i].valueに元の値を入れたい。 } } <form name="form1" action="updata.php" method="POST"> <input type="button" name ="save" value="更新" onClick="check()"> </form> 以上、ご教示よろしくお願いいたします。

専門家に質問してみよう