質問

質問者:javatea_1985 値の受け渡し(少し複雑)
困り度:
  • 困ってます
値の受け渡し(少し複雑)
失礼いたします。
質問させてください。

サーブレットから値(id[i])を受け取り画面に表示させ、そのリンクをクリックした時サーブレットのservに値(id[i]とi)を受け渡したいです。その際JavascriptとしてvalueDeliveryを使いました。

(全体をiが0からリスト数まででループさせている。)
<form action="serv" name=frm method=post>
<a href="JavaScript:valueDelivery('<%=id[i]%>')" onclick="document.frm.id.value='<%=id[i]%>';"><%=id[i]%></a><br>
<input type="hidden" name="id" value="<%=id[i]%>"><input type="hidden" name="i" value="<%=i%>"><input type="hidden" name="action" value="addAnkenn">

<script>
function valueDelivery(js_id)
{

if(js_id == "" || js_id == null)
{
alert(js_id);
}
else
{
alert(js_id);
document.frm.id.value = js_id;
document.frm.submit();
}
}
</script>

ところが、アラートではちゃんとidが表示されるものの送った先のサーブレットではid[i]の値がすべてid[0]の値になっています。iはいつも0ですし。。。これはサブミットした時またiを0から数え始めているということでしょうか?
よくわかりません、分かる方、よろしくお願いします。m(__)m
質問投稿日時:2006/07/07 16:30
質問番号:2261397
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:copymaster No.4の補足です。ちょっと抜けがありました。
</script>の後は次のようにしてください。

---ループ開始---

<a href="JavaScript:valueDelivery('<%=id[i]%>','<%=i%>')"><%=id[i]%></a><br>

---ループ終了---

<form action="serv" name="frm" method="post">
<input type="hidden" name="id" value="">
<input type="hidden" name="no" value="">
<input type="hidden" name="action" value="addAnkenn">
</form>
回答日時:2006/07/08 01:05
回答番号:No.5
この回答へのお礼 ご回答いただきありがとうございました。(*´▽`*)
ご指摘のとおり、value=""のところにはじめから値を入れていたのが間違いでした。
回答が遅くなって申し訳ありません。

回答

良回答20pt

回答者:copymaster 過度に複雑になっていますが、そもそも
同じ処理をhtmlとjavascriptで2重、3重に書いているのが問題です。

1.<a href="JavaScript:valueDelivery('<%=id[i]%>')
2. onclick="document.frm.id.value='<%=id[i]%>'
3.document.frm.id.value = js_id;
4.<input type="hidden" name="id" value="<%=id[i]%>">
5.<input type="hidden" name="i" value="<%=i%>">


*1.を書けば、自動的に3が呼ばれるため、2は不要です。
*3でidに値がセットされるため、4は不要です。
*5は意味がないと思われます。
たとえば"5"というキーに"5"という値が入ったものが送られても利用しようがありません。

これらの余計なコードをそっくり削除し、必要な箇所のみループさせると以下のような構造になると思います。
値と、配列番号が欲しいわけですから、
POSTするキーの名前を
値=id、配列番号=no とすると、

<script>
// Javascriptのfunction
function valueDelivery(js_id,js_no)
{

if(js_id == "" || js_id == null)
{
alert(js_id);
alert(js_no);
}
else
{
alert(js_id);
alert(js_no);
document.frm.id.value = js_id;
document.frm.no.value = js_no;
document.frm.submit();
}
}
</script>
<form action="serv" name="frm" method="post">

---ループ開始---

<a href="JavaScript:valueDelivery('<%=id[i]%>','<%=i%>')"><%=id[i]%></a><br>

---ループ終了---

<input type="hidden" name="action" value="addAnkenn">
</form>

動作を試したわけではないので、これで動くかはわかりませんが、イメージとしてはこんな具合になります。
回答日時:2006/07/08 00:50
回答番号:No.4
この回答へのお礼 この回答にお礼をつける(質問者のみ)

回答

 

回答者:liwet JSPでformを複数(0からid[]のリストの数まで?)作っているようですね。
そのときに、formのnameがすべて同じfrmになっているので、valueDeliveryでjs_idをvalueに代入したときと、submitしたときに使用しているformが不定になっているのではないでしょうか?
入力を受ける部分はformに入れず、サーブレットへ送るformは1つだけ作れば良いと思います。
回答日時:2006/07/08 00:13
回答番号:No.3
この回答へのお礼 ご回答ありがとうございました。
たしかにおっしゃる通りで、frmの値が複数あるのにfrmを指定していました。
とても勉強になりました。

ありがとうございました!

回答

良回答10pt

回答者:noname#45950 こんにちは。

>サーブレットから値(id[i])を受け取り画面に表示させ、そのリンクをクリックした時サーブレットのservに値(id[i]とi)を受け渡したいです

この文面そのままであれば、私だったら、

・渡すのはiのみで、id[i]は、サーブレットで引っ張ってくる

・iおよびid[i]の2つを、渡す

のどちらか(でもたぶん1つめ)にしますが・・・?
回答日時:2006/07/07 17:19
回答番号:No.2
この回答へのお礼 そんな方法があるのですね!
まだレベルが低いので理解不能です・・
ただ、分かるように努力をして見ます。

回答

 

回答者:noname#19197 送り先のサーブレットでは、id[]はどこから取得してるのでしょうか?

送り先のサーブレットのソースコードを見せて下さい。
回答日時:2006/07/07 17:10
回答番号:No.1
この回答へのお礼 返信が遅くなって申し訳ありませんでした。
急用で2,3日いませんでした。
ご回答ありがとうございました。
最新から表示回答順に表示良回答のみ表示