プロが教えるわが家の防犯対策術!

プログラム初心者です。

js上で配列を作成し、それをフォームのvalue値としてサーブレットに送りたいのですが上手くいかず詰まっております…。
どなたかお力を貸していただけないでしょうか?

■js
function setValue(){
var val1=['a1','a2','a3'];
var val2=['b1','b2','b3'];
var val3=['c1','c2','c3'];
for(i=0;i<3;i++){
document.form1.sub_val[i].value =(val1[i]+','+val2[i]+','+val3[i]);
}
return true;
}

■jsp
<head>
<script type="text/javascript" src="setValue.js"></script>
</head>
<body>
<form name="form1" method="post" action="XXX" onSubmit="return setValue()">
<INPUT type="hidden" name="sub_val[]">
<BUTTON type="submit">送信</BUTTON>
</form>
<body>

■やりたいこと
js上で配列内の文字列を連結して、それをサーブレットへ送りたい
今回だと
sub_val[0]="a1,b1,c1";
sub_val[1]="a2,b2,c2";

という配列suv_valをサーブレットへ送る

■困っていること
サーブレットへ配列が遅れない
alert(document.form1.sub_val[i].value) でアラートが反応しなかったのでdocument.form1.sub_val[i].valueの書き方に問題があるのではとは思うのですが…。

よろしくお願いいたします。

A 回答 (3件)

サーブレットに配列を送るには、「同じ名前」の要求パラX―タを


複数おくるだけです。
つまりフォームの中に同じname属性のinputタグと複数JSで
生成すればよい。

勿論、JSONやXMLをー個の文字列として送って、サーバ側で
サーブレットがそれを文字列として受け取った後、配列に
変換してもよいです。
    • good
    • 0

JSON に変換すれば、配列だろうがなんだろうが、簡単に送れます。


ただし、サーブレット側にて JSON から値を取り出す一手間が増えますのでご注意ください。

<script>
function setValue(ev) {
_ if (ev.target.name != 'form1') return;
_
_ var val1=['a1','a2','a3'];
_ var val2=['b1','b2','b3'];
_ var val3=['c1','c2','c3'];
_
_ var values = [];
_ for (i=0; i<3; i++) {
_ _ values.push(val1[i] + ',' + val2[i] + ',' + val3[i]);
_ }
_ var form = document.forms['form1'];
_ form.elements['sub_val'].value = JSON.stringify(values);
}
window.addEventListener('submit', setValue, false);
</script>
<form name=form1 method=post action=xxx>
<input type=hidden name=sub_val>
<button type=submit>送信</button>
</form>
    • good
    • 0

こんな感じですか?


動作が確認できたらtextをhiddenにしても大丈夫です

<script>
function setValue(){
var val1=['a1','a2','a3'];
var val2=['b1','b2','b3'];
var val3=['c1','c2','c3'];
for(i=0;i<3;i++){
document.form1.elements["sub_val["+i+"]"].value =(val1[i]+','+val2[i]+','+val3[i]);
}
return false;//submitするならtrue;
}
</script>
<form name="form1" method="post" action="XXX" onsubmit="return setValue()">
<INPUT type="text" name="sub_val[0]">
<INPUT type="text" name="sub_val[1]">
<INPUT type="text" name="sub_val[2]">
<BUTTON type="submit">送信</BUTTON>
</form>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

<INPUT type="text" name="sub_val[0]">

のように配列のインデックスを書けば送ることはできるのですが、今度はrequest.getParameter("sub_val")で取得することができす…。
request.getParameterValues("sub_val[0]")のようにインデックス番号まで指定すれば取れるのですが、それだとあまり意味がない感じで…。

何かいい方法がございますでしょうか?

お礼日時:2016/09/11 00:02

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