- ベストアンサー
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]が表示されてしまいます。 分かる方がいましたら、ご教授下さい。よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ループ内にformを記述してみてはどうですか。
その他の回答 (2)
質問を拝見して、 ・HTMLのsubmitについて、理解出来ているのかな? ・ブラウザで表示されたHTMLのソース、見てないんだろうな? と、思ってしまうのですが、いかがでしょうか? formをデータの個数分作って、そこにhiddenでデータを埋め込むというのは、動くとは思うのですが、もしも客先提出するものだったら、ちょっと・・・と感じます(私的には、ですが)。なにせ、ブラウザ右クリックで「ソースの表示」したら、まるわかりですから。 私だったら、DBのプライマリーキー的な物をURLパラメタに 持たせて、サーバーで突合せをします。 また、どうしてもクライアント側で処理したい時は、jspでデータをJavaScriptの多次元配列に展開し、ボタンのsubmitではない)onClickイベントで、取得・表示させたこともあります。
- process9
- ベストアンサー率29% (81/271)
書かれた部分のソースだけの判断なら、 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)制御を行う。 でしょうか。