アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。

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]が表示されてしまいます。

分かる方がいましたら、ご教授下さい。よろしくお願い致します。

A 回答 (3件)

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

    • good
    • 2

質問を拝見して、



・HTMLのsubmitについて、理解出来ているのかな?
・ブラウザで表示されたHTMLのソース、見てないんだろうな?

と、思ってしまうのですが、いかがでしょうか?

formをデータの個数分作って、そこにhiddenでデータを埋め込むというのは、動くとは思うのですが、もしも客先提出するものだったら、ちょっと・・・と感じます(私的には、ですが)。なにせ、ブラウザ右クリックで「ソースの表示」したら、まるわかりですから。

私だったら、DBのプライマリーキー的な物をURLパラメタに
持たせて、サーバーで突合せをします。

また、どうしてもクライアント側で処理したい時は、jspでデータをJavaScriptの多次元配列に展開し、ボタンのsubmitではない)onClickイベントで、取得・表示させたこともあります。
    • good
    • 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)制御を行う。

でしょうか。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A