• ベストアンサー

値の受け渡し(少し複雑)

失礼いたします。 質問させてください。 サーブレットから値(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

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

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

  • ベストアンサー
回答No.4

過度に複雑になっていますが、そもそも 同じ処理を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> 動作を試したわけではないので、これで動くかはわかりませんが、イメージとしてはこんな具合になります。

その他の回答 (4)

回答No.5

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>

javatea_1985
質問者

お礼

ご回答いただきありがとうございました。(*´▽`*) ご指摘のとおり、value=""のところにはじめから値を入れていたのが間違いでした。 回答が遅くなって申し訳ありません。

  • liwet
  • ベストアンサー率72% (18/25)
回答No.3

JSPでformを複数(0からid[]のリストの数まで?)作っているようですね。 そのときに、formのnameがすべて同じfrmになっているので、valueDeliveryでjs_idをvalueに代入したときと、submitしたときに使用しているformが不定になっているのではないでしょうか? 入力を受ける部分はformに入れず、サーブレットへ送るformは1つだけ作れば良いと思います。

javatea_1985
質問者

お礼

ご回答ありがとうございました。 たしかにおっしゃる通りで、frmの値が複数あるのにfrmを指定していました。 とても勉強になりました。 ありがとうございました!

noname#45950
noname#45950
回答No.2

こんにちは。 >サーブレットから値(id[i])を受け取り画面に表示させ、そのリンクをクリックした時サーブレットのservに値(id[i]とi)を受け渡したいです この文面そのままであれば、私だったら、 ・渡すのはiのみで、id[i]は、サーブレットで引っ張ってくる ・iおよびid[i]の2つを、渡す のどちらか(でもたぶん1つめ)にしますが・・・?

javatea_1985
質問者

お礼

そんな方法があるのですね! まだレベルが低いので理解不能です・・ ただ、分かるように努力をして見ます。

noname#19197
noname#19197
回答No.1

送り先のサーブレットでは、id[]はどこから取得してるのでしょうか? 送り先のサーブレットのソースコードを見せて下さい。

javatea_1985
質問者

お礼

返信が遅くなって申し訳ありませんでした。 急用で2,3日いませんでした。 ご回答ありがとうございました。

関連するQ&A

  • 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
  • アンダーバーのname値は取得できないでしょうか?

    Javascriptのname値にアンダーバーは付けない方が 良いのでしょうか? 又、使用した場合、name値を取得する方法はありますか? 値を取得できない例 alert(document.frm1.day_flg.value); 値を取得できる例 alert(document.frm1.dayflg.value); <form name="frm1"> <input type="radio" name="day_flg" value="1" checked> <input type="radio" name="dayflg" value="1" checked> </from>

  • 配列の受け渡し

    失礼致します。 配列について困っていまして、質問させてください。 今、フォームデータとしてsubmitを押したときにjavascriptから配列をサーブレットに受け渡ししたいです。フォームを含めたソースは次のようになります。 <script> function submitArr(n) { var i = 0; var array = []; while(i<n) { array.push(variable); // variableはiの値に応じて変わる変数。 } document.frm.array.value = array; ☆ } </script> <form action="servlet" method="post" name="frm"> <input type = "submit" value = "submit" onClick="submitArr()"> <input type = "hidden" value = "" name="array"> ☆ </form> 次に、servlet側でこれを受け取ります。 String[] array = new String[n]; ★ while(i<n) { array[i] = req.getParameter(array[i]); ★ } 以上が本質的な部分だと思うのですが、☆および★の部分をどう書いたらいいかわかりません。 添え字も少しあやふやなのですが、 分かる人がおられましたら、教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • GetElementById の使い方(IE11)

    お世話になります。 html(5)内に、inputのhiddenに、複数のデータが設定されていまして、 そのデータをJavaScriptで取得し、alert表示したいのです。 例えば、 <input type="hidden" name="A0" id="A0" value="名称[1]"> <input type="hidden" name="A1" id="A1" value="名称[2]"> <input type="hidden" name="A2" id="A2" value="名称[3]"> を for(i=0;i<3;i++){ if( document.xxxform.GetElementById("A"+i) ){ data = document.xxxform.GetElementById("A"+i).value; str += data ; } } alert(str); のような感じにしたのですが、IE11でエラーになってしまいます。 if( document.xxxform.GetElementById("A"+i) ){ → ここでエラーのようです。 正しくはどのようにしたらよいのでしょうか? どなたか、アドバイスをお願いいたします。

  • 値の受け渡しについて

    JavaScriptを使用しa.htmlからb.htmlへ 値の受け渡しについて分らない事があります。 やりたいことはa.html内にある <a href="b.html">あああ</a>の「あああ」の値を b.html内にある<INPUT>に入れたいのです。 現在記述しているコードを下記記しますので 何方かご教授お願いします。 ■a.html <html> <a href="b.html" onclick="this.href=this.href+'?'+encodeURIComponent(this.innerHTML)">あああ</a> </html> ■b.html <html> <script type="text/javascript"> query = decodeURIComponent( location.search.slice(1,1000) ); document.getElementById('in_name').value = query; </script> <form> <INPUT type="text" id="in_name" name="in_name" value=""> </form> </html>

  • IF文でタグの値を確認する

    全くの初心者です。 以下でmyIDには9が入っていると思うのですが <div id="hidden"> <input type="hidden" name="myID" id="myID" value="9"> Scriptで <script type="text/javascript"> if (myID = "9") alert("test"); </script> では反応しません。恐らく変数に値を持って行く方法が必要なのだ とは思うのですが お教え下さい。

  • 次画面への受け渡し

    お世話になります。 1の画面から、2の画面へ遷移します。 1の画面でのボタン押下により、hiddenの内容を2の画面に渡し、2の画面のボタン押下で受け渡しているか確認したいのですが、やり方がわかりません。 下に試したものをのせておきます。 あと、書き方で問題があったり、こうした方がいいという注意もしてくださると助かります。 単純なJavaScriptだと思うのですが、初心者でどうしたらいいかもわかりません。助けてください。 1の画面: <HTML> <HEAD> <script language="JavaScript"> <!-- function selEvent(selID){ document.frmAct.fuseaction.value = selID; alert(selID); } --> </script> </HEAD> <BODY> <form name="frmAct" method="post" action="form_action2.html"> <INPUT TYPE="submit" VALUE="新規登録" onClick="selEvent(1);"> <INPUT TYPE="submit" VALUE="ID検索" onClick="selEvent(2);"> <INPUT TYPE="hidden" NAME="fuseaction" VALUE=""> </form> </BODY> </HTML> 2の画面: <HTML> <HEAD> <script language="JavaScript"> <!-- function kakunin(){ alert(document.frmAct.fuseaction.value); } --> </script> </HEAD> <BODY> <form name="frmkaku" method="post" action="xxx.html"> <INPUT TYPE="button" VALUE="確認" onClick="kakunin();"> </form> </BODY> </HTML>

  • javascriptで取得した値をテキストボックスに・・・

    IE5.5です。 javascriptで取得した値をテキストボックスに格納したいのですが、 うまくいきません。 <SCRIPT language="javascript"> var varVal=true </script> <form> document.write("<input type='hidden' name='myVal' vaue="+varVal+">"); </form> javascriptが初心者でよくわからないのですが、 例えば <input type="hidden" name="myVal" value=varValに格納された値> といった書き方もできるのでしょうか? よろしくご教授願います。

  • form につけた id 値の取得方法

    form 内に id という名前の input 要素があると、form につけた id 値が取得できません。firefox で確認しましたが、例の f2.id が input 要素になります。このような場合 form の id 値はどのようにすれば取得できるでしょうか。 <!doctype html> <html> <head><title>id test</title></head> <body> <form id="f1" name="f1"> <input type="hidden" name="idx"> </form> <form id="f2" name="f2"> <input type="hidden" name="id"> </form> <script type="text/javascript"> var f1 = document.getElementById('f1'); var f2 = document.getElementById('f2'); alert("f1.name: " + f1.name + ", f1.id: " + f1.id + "\nf2.name: " + f2.name + ", f2.id: " + f2.id); </script> </body> </html>

  • 読み込む外部スクリプトをセレクトボックスを使って選べないでしょうか?

    お世話になります。 フォーム内に配置した、1から5までの数字を選べるセレクトボックスを使って、そのフォーム内に読み込む.jsファイルを選択することは出来ないでしょうか? 外部ファイルには、UsualSet.js、EmergencySet.js、PauseSet.jsなどがあって、そのスクリプトファイルの中身は document.write("<input name=\"youbi\" type=\"hidden\" value=\"土曜\"><input name=\"codenumber\" type=\"hidden\" value=\"732\"><input name=\"busho\" type=\"hidden\" value=\"経理\">"); とかいった感じになっています。 つまり、セレクトボックスで何番を選ぶかによって、CGIに渡す値を$youbiと$codenumberと$bushoとの3つ全ていっぺんに変更出来るようにしたい訳です。 しかし、そのセレクトボックスにどういう仕掛けをしたら良いかわからなくて困っています。 まさか、 <FORM ACTION="pro.cgi" METHOD="POST">  <select name="kazu">   <option value="<script language="javascript" src="UsualSet.js>" selected>1</option>   <option value="<script language="javascript" src="EmergencySet.js>" >2</option>   <option value="<script language="javascript" src="PauseSet.js>" >3</option>   <option value="<script language="javascript" src="MorningSet.js>" >4</option>   <option value="<script language="javascript" src="FulleSet.js>" >5</option>  </select>   <input type="hidden" name="kaijou" value="22890">  <input type="hidden" name="boxnumber" value="62">  <input type="submit" name="Submit" value="送信"> </FORM> なんてわけに行かないですもんね。 どうしたらいいかおわかりの方がいらっしゃいましたら、どうかよろしくお願い致します。