• ベストアンサー

hiddenの値が期待した値で取得されないのです

いつもお世話になっております。 for文の中で、押されたボタンのデータをhiddenで送信しようとしているのですが、 うまくいきません。 ソースは下記になります。 aaa.jsp <% for(int i = 0;i < list.size(); i++) { caModel = (CategoryModel)list.get(i); int i1 = caModel.getCategory(); int i2 = caModel.getCategory_sub(); String s1 = caModel.getCategory_name(); %> <html:submit property="submit"><%=s1%></html:submit> <%=i1%>,<%=i2%> <input type="hidden" name="category" value="<%=i1%>"> <input type="hidden" name="category_sub" value="<%=i2%>"> <% } %> 途中でi1とi2を表示しているのですが、期待している通りに表示されます。[1,1]と[1,2]が表示。 これをservletで取得すると、 bbb.java String st1 = request.getParameter("category"); String st2 = request.getParameter("category_sub"); System.out.println("st1 = " + st1); System.out.println("st2 = " + st2); 2つ目のボタンを押して[1,2]を送信したいのですが[1,1]が表示されてしまいます。 分かる方がいましたら、ご教授下さい。よろしくお願い致します。

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

  • ベストアンサー
noname#19197
noname#19197
回答No.1

ループ内にformを記述してみてはどうですか。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#45950
noname#45950
回答No.3

質問を拝見して、 ・HTMLのsubmitについて、理解出来ているのかな? ・ブラウザで表示されたHTMLのソース、見てないんだろうな? と、思ってしまうのですが、いかがでしょうか? formをデータの個数分作って、そこにhiddenでデータを埋め込むというのは、動くとは思うのですが、もしも客先提出するものだったら、ちょっと・・・と感じます(私的には、ですが)。なにせ、ブラウザ右クリックで「ソースの表示」したら、まるわかりですから。 私だったら、DBのプライマリーキー的な物をURLパラメタに 持たせて、サーバーで突合せをします。 また、どうしてもクライアント側で処理したい時は、jspでデータをJavaScriptの多次元配列に展開し、ボタンのsubmitではない)onClickイベントで、取得・表示させたこともあります。

全文を見る
すると、全ての回答が全文表示されます。
  • process9
  • ベストアンサー率29% (81/272)
回答No.2

書かれた部分のソースだけの判断なら、 hidden項目の名前が各行(複数行ですよね?)全て name="category" と name="category_sub" になっているのが原因です。 同一名だとどのデータを送っていいのか、IE側に分からないので (なのでHTMLでは、思ったとおりに各値が設定されているはず。 送信時点で) 最初の奴を送っているように見えます。 というか、データは複数行で、取得側が1行分のみって・・・ 人間でもどのデータを取得したいか分からないはずです。 (それとも、1,2だよって何か処理があるのでしょうか・・・) 回避方法は、  1.hidenフィールドの名前を全て別の名前にする。    name="category1"  name="category_sub1"    name="category2"  name="category_sub2"    name="category3"  name="category_sub3"  で受け取り側でどれを受け取りたいか名前を指定する。  2.javaScript にて 送信データを選別して送信する。  3.#1の言われている通りFormを分けてjavaScriptによる    送信(Submit)制御を行う。 でしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 値の取得

    先日と同じ問題を出してしまい、申し訳ございません。 iの値を取得したいですが、どうしてもservlet側を取得が出来ないです。 教えてください。 <%@page contentType="text/html; charset=Windows-31J"%> <%@ page import="java.util.*" %> <%@ page import="blog.*" %> <html> <body> <script type="text/javascript"> <!-- function check(){ if(window.confirm('本当に削除してよろしいでしょうか?')){ // 確認ダイアログを表示 var element = document.getElementById("i") request.setAttribute("id", element);// return true; // 「OK」時は送信を実行 } else{ // 「キャンセル」時の処理 window.alert('キャンセルされました'); // 警告ダイアログを表示 return false; // 送信を中止 } } //--> </script> <center> <table> <form action="SeachServlet" method="POST"> <tr> <td>名前:<input type="text" name="name" size="40" value="<%if(request.getAttribute("name")!=null){%> <%=request.getAttribute("name")%><%}%>"></td></tr> <tr><td>日付: <select name="year"> <option><%if(request.getAttribute("year")!=null){%> <%=request.getAttribute("year")%> <%}%></option> <%Calendar cl=Calendar.getInstance(); int year = cl.get(Calendar.YEAR); for(int i=year-7; i<=year+3;i++){ %> <option value="<%=i %>"> <%=i %></option> <%} %> </select>年 <select name="month"> <option><%if(request.getAttribute("month")!=null){%> <%=request.getAttribute("month")%> <%}%></option> <% for(int i=1; i<=12;i++){ if(i<10){%> <option value="0<%=i %>">0<%=i %></option> <%}else{%> <option value="<%=i %>"><%=i %></option> <%}}%> </select>月 <select name="day"> <option><%if(request.getAttribute("day")!=null){%> <%=request.getAttribute("day")%> <%}%></option> <% for(int i=1; i<=31;i++){ if(i<10){%> <option value="0<%=i %>">0<%=i %></option> <%}else{%> <option value="<%=i %>"><%=i %></option> <%}}%> </select>日</td> </tr> <tr><td><input type="button" value=" 印刷 "></td> <td><input type="submit" name="seach" value=" 検索 "></td> </form> </tr> </table> <hr> <FORM> <div><input type="button" value=" 戻る " onClick="history.back()"></div> </FORM> <form action="SeachServlet" method="POST"> <% List<Loginbeans> list = (List<Loginbeans>)request.getAttribute("productlist"); if(list.isEmpty()){ out.print("該当のデータはありません。"); }else{ %> <table border="1"> <tr><th>ユーザID</th><th>名前</th><th>日付</th></tr> <% int i=0; for (Loginbeans bn : list) { i++;//この値を取得したいです %> <tr><td><%=bn.getUser_id()%><input name="use_id" type="hidden" value="<%=bn.getUser_id() %>"/></td> <td><%=bn.getName()%><input name="name" type="hidden" value="<%=bn.getName()%>"/></td> <td><%=bn.getTotal()%><input name="total" type="hidden" value="<%=bn.getTotal()%>"/></td> <td><input id="<%=i%>" type="submit" value=" 削除 " name="delete" onClick="return check()"></td> </tr> <%}}%> <input type="hidden" name ="number" value ="element"> </form> </table> </center> </body> </html> selvet側で String id = (String)request.getAttribute("id"); String ida = request.getParameter("number"); 取得できないですが・・

  • HIDDENについて

    sea_clear_sky8です。 [環境] Win98SE PWS [質問内容] 次のページ、前のページ、最初のページ、最後のページっていうのを作って ページングさせたいのですが、 下記のように一つ一つにHIDDENNを作ると、全部のボタンが表示されている 場合にボタンをクリックすると下記SQLで、Commandオブジェクトのコマンドが設定されていませんとエラーが表示されます。 [SQL] "select * from test_t " & _ "where name like '%" & Request("nm") & "%' " & _ "order by id " & _ "limit " & Request("page_num")*10 & ",10" [最初のページ] response.write "<input type=""Submit"" value=""最初のページ&gt""onclick=""myClick();"">" response.write "<input type=""HIDDEN"" name=""page_num"" value=""&0&"">" [次のページ] response.write "<input type=""Submit"" value=""次の10件&gt""onclick=""myClick();"">" response.write "<input type=""HIDDEN"" name=""page_num"" value=""" & request("page_num")+1 & """>" [前のページ] response.write "<input type=""Submit"" value=""前の10件&gt""onclick=""myClick();"">" response.write "<input type=""HIDDEN"" name=""page_num"" value=""" & request("page_num")-1& """>" [最後のページ] response.write "<input type=""Submit"" value=""最後のページ&gt""onclick=""myClick();"">" response.write "<input type=""HIDDEN"" name=""page_num"" value=""" &Abs(Int(-1*(AllCnt/10)))& """>" エラーの原因は最初のページと最後のページのVALUEの部分のvalue=""&0&""、 value=""" &Abs(Int(-1*(AllCnt/10)))& """の部分の記入の仕方が おかしいか、各ボタンごとにHIDDENを作成しているため、おかしいのでは ないかと考えています。 HIDDENを一個にする方法はありますか、 いろいろ考えていますが、考えつかない状態です。 また、他に原因があればよろしくお願いします。 すいませんが、ご教授願います。 よろしくお願いします。

  • JSP→JSP フォームチェック

    困っているので助けてください。 まずプログラムの説明をさせてもらいます。 JSPからfromをつかってJSPにフォーム情報を送ります。 プログラムはこんな感じです。 <form action="abcdefg.jsp" method="post"> <input type="hidden" name="abc" value="abc"> <input type="hidden" name="def" value="def"> <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="bb" value="bb"> <input type="checkbox" name="cc" value="cc"> <input type="submit" value="次へ"> </form> これをabcdefg.jspで受け取る場合 String hidden_abc = request.getParameter("abc"); String hidden_def = request.getParameter("def"); とhiddenは必ず値が入っているのでこれで受け取れるのですが チェックボックスは選択しているかどうかわからないので上の記述では だめなようなのですがどのようなプログラムを書いたらいいのですか? 説明がうまく出来なく申し訳ないです。よろしければ教えてください。

    • ベストアンサー
    • Java
  • JavaScriptの値をjavaに渡す方法

    function cansel_goBack(){ document.form1.canselval.value = "cansel"; document.form1.action="abc"; document.form1.submit(); } // --> </SCRIPT> (中略) <input type="hidden" name="canselval" value="">   <input name="back" type="button" value="キャンセル" onClick="cansel_goBack()"> 「document.form1.canselval.value = "cansel"」この値をjavaで取得するにはどうすればいいでしょうか? 以下のようにしてみたのですがダメでした 「javaファイル=ABC: canselval =(String)request.getParameter("canselval");」

  • javaの掲示板について

    サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); //削除 if(deleteMessage != null){ String sql = "SELECT * FROM MESSAGE_TABLE where ID ="; String rsPassword = request.getParameter("rsPassword"); String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); if (deletepassword.equals(sql) || deleteid.equals(sql)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } if (!deletepassword.equals(sql) || deleteid.equals(sql)){ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } ------------------------------------------------------------------------------------ jsp部分 <input type="deletepassword" size="20"> <input type="hidden" name="id" value="<%= message.getId() %>"> <input type="hidden" name="rsPassword" value="<%= message.getPassword() %>"> <input type="submit" name="deleteMessage" value="削除"> それぞれをこの様な書き方で記述した場合、削除ボタンを押された際に削除フォームに入力されたパスワードとidをデータベース内に格納されているパスワードとidと比較して削除、もしくはエラーという様にできているでしょうか?できていなければ変更点の御指摘をお願いします。 ------------------------------------------------------------------------------------ <% String errorpass = (String)request.getAttribute("errorpass"); if(errorpass != null){ out.println(errorpass); } %> またjspの表示部分を上記のようにしているのですが、out.printlnを使わないで記述する場合どのように書けばよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • hiddenで送ったデータの取り出し方

    PerlもHTMLも初心者です。hiddenの使い方が分からないのですが、 ■sub test1 <form NAME="minshu" ACTION="test.cgi" METHOD="post"> <input TYPE="submit" > <INPUT TYPE="hidden" NAME="aso" VALUE="write"> .. ■test.cgi $hatoyama=$Form{'aso'}; と、hiddenで送った変数をtest.cgiで受け取る時、$Form{}で受け取ると決まっているのですか?$minshu{aso}とかでは受け取れないのですか? この場合、hiddenのnameはどういう役目をしているのですか? hiddenのname="minshu" とかすれば$minshu{aso}で受け取れるかと思っていたのですが、うまくいかないようなので..

    • ベストアンサー
    • Perl
  • 違うページのフォームデータをsubmitしたい

    失礼致します。 質問させてください。 下にあるjsp-Servletについて値の受け渡しに困っています。目的は、jspから表示される(ソースはservletにある)入力ボタンにてjspソース中のチェックボタンのon/off情報(画面から入力される。)をservlet2に受け渡したいのです。 しかし、submitボタンのあるソースとは違うソースにあるフォーム情報をどのようにして関連付けて飛ばせばいいか分かりません。 よろしくお願いします。 jsp ------------------------------------------ // servletをインクルード。入力ボタンがここに来る。 <jsp:include page = "/servlet" flush="true"> <jsp:param name="name" value="<%=name%>"/> </jsp:include> // 入力ボタンの下にチェックボックスが表示される。 int nSerial = requset.getParameter(Serial); <input type='checkbox' name='" + nSerial + "' value='on'> ------------------------------------------- servlet.java ------------------------------------------- // 入力ボタンのソースはここにある。 String name = req.getParameter(name); out.println("<form method=post action=servlet2>"); out.println(" <input type=hidden name=name value="+name+">"); out.println(" <input type=submit value='入力'>"); out.println("</form>"); --------------------------------------------

    • ベストアンサー
    • Java
  • JSP内での配列の値取得方法。

    こんにちは。 -------- (略) <SCRIPT LANGUAGE="JavaScript" > function NextPage(no){ with( document.frm1 ) { hidNO.value = no; hidPlanId.value = 「ここに配列から取得した値を表示したい」; action = "Next.jsp"; submit(); } (略) <FORM name="frm1"> <% for(int i=0; i<(DBより取得した配列).length; i++) { ROW(HashMap継承の配列クラス) row = rows[i]; %> <INPUT TYPE="hidden" ID="hidKey" NAME="hidKey" VALUE="<%= i番目の値(1)%>" > <INPUT TYPE="hidden" ID="hidKey" NAME="hidKey" VALUE="<%= i番目の値(2)%>" > <TD><INPUT TYPE="button" NAME="btnDet<%= i %>" VALUE="詳細表示" onClick="NextPage('<%= i %>');" > </TD> <% } %> </FORM> ******* 上記のhidkeyのvalue値をJavaScript内でi番目の値を 取得するにはどのように記載したらよいのでしょうか・・・。 他のクラス等を使っているため、うまくコードが表現 できていないかもしれませんが、 もしこれでわかった方、ぜひ教えてください。

    • ベストアンサー
    • Java
  • for文でpostの値を受け取る方法

    以下のようなコードで、postで投げられた値を、for文で、添え字を組み立てて受け取って表示したいのですが、添え字の生成が間違っているのか、うまくいきません。 何を修正すればよいか教えてください。 <form action="" method="post"> <input type="hidden" value="A" name="name_0"> <input type="hidden" value="B" name="name_1"> <input type="hidden" value="C" name="name_2"> <input type="hidden" value="D" name="name_3"> <input type="submit"> </form> <?php for($i =0; $i < 4; $i++){ if (!empty($_POST['name_$i'])) { print $_POST['name_$i']; } } ?>

    • ベストアンサー
    • PHP
  • submitの値取得に

    sea_clear_skyです。 [環境] Win98SE PWS フォームに名前が同じ二つのサブミットのボタンを作成します。 そして、飛んだ先のASPのファイルで、サブミットのボタンのV ALUEの値で、IF文で、処理を分岐したいのですが、 Reqest("サブミットボタン名.Value")で 値を取得することができません。 また、hiddenのボタンを作り、サブミットの値を入れて移していますが うまくいきません。 ご教授願います。 [ソース] Response.write"<form action =""ASPファイル"" method=""POST"">" フォームの中身は省略 Response.write"<input type=""submit""value=""更新"" name=""syouhin"">" Response.write"<input type=""submit""value=""次へ"" name=""syouhin"">" Response.write"<input type=""reset""value=""リセット"" name=""syouhin"">" Response.write"<input type=""hidden"" name=""kakushi""value=""&syouhin.value&"">" 飛んだ先のASPファイルのデータ表示 response.write request("shouhin") response.write request("kakushi")