配列の受け渡しについて困っています

このQ&Aのポイント
  • JavaScriptを使用してフォームデータから配列をサーブレットに受け渡す方法を教えてください。
  • 配列の受け渡しには、フォームでsubmitボタンが押されたときに呼び出されるJavaScript関数を作成し、配列を生成し、フォームのhiddenフィールドにセットします。
  • 次に、サーブレット側では受け取ったパラメータを処理して配列に格納します。
回答を見る
  • ベストアンサー

配列の受け渡し

失礼致します。 配列について困っていまして、質問させてください。 今、フォームデータとして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
  • 回答数2
  • ありがとう数2

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

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

ただ、分かりませんといって聞くのは簡単ですが、それでは進歩しませんよ。 分かりませんではなく、どこまで理解してどこが分からないのかを明示して下さい。 エラーが出ましたと言われても、エラー内容が見えないのに答えようがないです。 それでは、「エラーだからです。」としか回答しようがないです。 仕事でやっているのか趣味でやってるのか分かりませんが、もし趣味なら時間もたっぷりあるでしょうから自分で悩んで見て下さい。 仕事でやってるのなら、もっと責任を持ってやってください。 この問題を解決したら、その回答者に報酬がいくのですか? ここは、ただの掲示板ではないです。 ナレッジを溜めて、同じ問題を抱えている人の辞書になるものです。 ただ自分の解決のためではなく、再利用する他の人のことも考えてください。

javatea_1985
質問者

補足

了解しました。 今回からそうしますm(__)m 「どこまで理解していて」ということなのですが、 じっくり考えたところかなり明確になりました。 すごく単純なことがわかっていなくて、 javascript側で while(i<n) { var array = []; var S = eval( "document.form" + i + ".S.value" ); array[i] = S; i++; } document.frm.array.value = array; ★ <form> <input type = "hidden" value = "" name="array"> とする★の部分が分かりません。 サーブレット側に受け渡して出力するとi=n(iのとりうる最大値)の時のarrayだけは取れるのですが他がnull(もしくは空欄)になっています。 (null,null,null・・・,null,null,jdk)といった具合です。 どこがいけないのか教えて頂けますでしょうか?

その他の回答 (1)

noname#19197
noname#19197
回答No.1

JavaScriptは以下のようにして、 function push(form,value) { var e = document.createElement("input"); e.name="array"; e.type="hidden"; e.value=value; form.appendChild(e); } servleteでは、 String[] array = req.getParameterValues("array") これでできると思います。 未検証です。

javatea_1985
質問者

お礼

できました! array[i] = S; として配列を取っておいて document.frm.array.value = array; とする事でできていました。 ただ、途中で因数としてとったnと ループさせる文字として使ったiとnのnがかぶってしまっており、できているはずなのにできていませんでした。また、受け取る側にも同様のミスがあったり・・・。何がよくないのか分からなくてうまく伝えられませんで申し訳ありませんでした。。m(__)m

javatea_1985
質問者

補足

回答していただきありがとうございました。 ただ、push()を新しく関数として作ればいいのかどうか、 arrayをどのようにして配列にすればいいのかなどが分かりませんでした。 サーブレット側では String[] array = req.getParameterValues("array") として配列(?)を受け取った後 System.out.println(array[0]); としてみたもののエラーが出ました。 何がまずいのでしょうか??よろしくお願いします。m(__)m

関連するQ&A

  • フォームを使った配列変数の受け渡し

    PHP初心者です、よろしくお願いします。 フォームからPHPで配列変数を受け渡すことを考えています。 一次元配列はうまく渡せましたので、これを二次元にしましたところ、 うまく渡せません。基本的なPHPの文法がわかってないので、つまづい ています。多分、配列変数の記述方法がおかしいのだと思うのですが・・。 ご教授よろしくお願いします。 <html> <body> <form method = "POST" action ="test2.php" > <?php //データ渡し側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10'>\n"); echo ("<br>\n"); } echo ("</tr>\n"); } ?> <input type="submit" name ="sbmit" value="data_input" > </form> </body> </html> <?php //データ受け側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j < 2;$j ++ ){ $tmp_data[$i][$j] = $_POST["data"][$i][$j]; echo ("$tmp_data[$i][$j] <br>\n"); } } ?> <html> <body> <form method = "POST" action ="test2.php" > <?php for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10' value='$tmp_data[$i][$j]'>\n"); echo ("<br>\n"); } } ?> </table> <input type="submit" name ="sbmit" value="in" > </form> </body> </html> 実行結果は、 Array[0] Array[1] Array[0] Array[1] と表示されて、実際の入力した値が反映されません。

    • ベストアンサー
    • PHP
  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • select要素のvalueを配列で取得したいです

    select要素のvalueを配列で取得したく、下記のサンプルを動かそうと試みました。 <html> <head></head> <body> <form> <!-- ここに<select name="c1">~<select name="c20">の20個のselectがあるとする --> </form> <input type="button" value="はい" onclick="test(this.form)"> <script type="text/javascript"> function test ( form ) { var values = new Array(); for ( var i=0; i < 20; i ++ ) { var elm = form.elements['c'+i]; values[i] = elm.options[elm.selectedIndex].value; } } </script> </body> </html> このようなサンプルを動かそうとしたのですが、 var elm = form.elements['c'+i];のところの['c'+i]が正しくないようで 「elm is underfind」というエラーが出てしまいます <script> function myForm (form) { var values = new Array(); for ( var i=0; i<20; i++ ) { var elm = form.elements[i]; values[i] = elm.options[elm.selectedIndex].value; document.write(values[i] + "<br />"); } } </script> インデックス名を'c'+iからiにすると取得できるのですが、 ブラウザが読み込みをやめない状態になってしまいます。 select要素のnameはc1から始まりc20と何も換えていません。 何が間違っているのでしょうか。

  • 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
  • Arrayオブジェクトとforms配列

    以下のスクリプトを実行すると、(2)の所で「document.forms.GetFromArray is not found」 のエラーとなります。(ブラウザはFirefox)。 意図としてはArrayオブジェクトをカスタマイズして追加したGetFromArray()メソッドでforms配列を操作したいのですが... エラーメッセージからすると、「document.formsは配列(Arrayオブジェクト)では無い」と言っているようです。 この方法でforms配列を参照する方法を教えて下さい。 あるいは、Arrayオブジェクトではない、他のオブジェクトをカスタマイズするのでしょうか?お願いします。 <html> <head> <script type="text/javascript"> <!-- Array.prototype.GetFromArray=function(func){ for(var i=0;i<this.length;i++){ func(this[i]); } } function disp1(h){ alert(h); } function disp2(h){ alert(h.name); } function run(){ var array=new Array('dog','cat','fish'); array.GetFromArray(disp1); //(1) OK document.forms.GetFromArray(disp2); //(2) エラー } //--> </script> </head> <body> <form name="test"> <input type="text" name="bunrui" value="分類">/ <input type="text" name="detail" value="詳細">/ <input type="button" value="実行" onClick="run();"> </form> </body> </html>

  • javascript form送信後の動作

    以下のスクリプトでiframeにデータは送信できているんですが、<input type="text">に入力したテキストが残ってしまいます。どのように記述したらうまくいくでしょうか? <script type="text/javascript"> function send(){ var frm=document.txt_submit; frm.submit(); frm.reset(); } </script> <form name="txt_submit" action="log.cgi" method="post" target="log" autocomplete="off"> <input type="text" name="ctxt" size="20" value=""> <input type="button" value="送信" onclick="return send();"> </form>

  • 配列に格納した値が保存されない

    DB(Access)から取得した内容を配列に格納し、その内容を取り出すプログラムを 以下のように書いてみました。 whileループ内の alert("ループの中=" + data_array[i]); では配列の中の値が参照できるのですが whileループの外で for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } 配列の中身を表示させようとしたところdata_array.length の長さが0になっており 配列の中身が参照できない状態です。なにが原因かわかりますでしょうか。 <html> <script language="javascript" type="text/javascript"> function dbSearch() { var sql="select * from URL where flg=0"; var database = dbConnect(); var recordSet = database.Execute(sql); var data_array = new Array(); while (!recordSet.EOF){ data_array[i] = recordSet(0); alert("ループの中=" + data_array[i]); recordSet.MoveNext(); } alert("長さ=" + data_array.length); for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } database.Close(); return; } //データベースに接続 function dbConnect() { var database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\test.mdb;"); return database; } </script> <body> <input type="button" value="DB接続" onclick="dbSearch()"> </body> </html>

  • formの配列をjsでカウントしたい

    お疲れ様です。 PHPで処理する用に <input type="checkbox" name="array[]" val="11111" />チェック1 <input type="checkbox" name="array[]" val="22222" />チェック2 <input type="checkbox" name="array[]" val="33333" />チェック3 とnameを配列にしておき、submitされたときに、 チェックされた項目のみをカウントして○件チェックされました。 とポップアップするようなスクリプトを書きたいのですが、 document.MyForm.array.value <-普通のテキストならこう書きますが、 配列の場合はどうかいたらよいのでしょうか? http://ml.php.gr.jp/pipermail/php-users/2005-August/027043.html のdocument.form1.elements[i]や document.forms['MyForm'].elements['str[1]'].value などの書き方も試してみましたが、 undefinedになってしまいます。 PHP側はいまあるままいじりたくないので、form内のname属性はそのままにしたいです。 このような場合、どう書けばチェックされたものだけをカウントすることができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのページ間による配列の受け渡しについて

    A.php ---------------------------------------------------- for($i=0;$i<5;$i++){ $hairetu[$i]=$i; $h_name[$i]=$i; } print "<form action='./B.php' method='POST'> for($i=0;$i<5;$i++){ print "<input type='text' name='".$h_name[$i]."' value='".$hairetu[$i]."'>"; } print "<input type='submit' value='Bへ送信'>"; print "</form>"; ------------------------------------------------------------ 拙い流れですが、このようにAからBへと送信します。 Bはいったい、どのようにしてAから送信されてきた配列を受け取れることができるのでしょうか? JavaScriptは使わず、PHPのみで作成したいと思いますので、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 値の受け渡し(少し複雑)

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

専門家に質問してみよう