【Java】サーブレット・jsp間のデータ受け渡し方法と、SubmitしてPOST・GETでリクエストを送信するとデータが重複して送られてくる件
JavaでWebアプリケーションを開発中
たいがい多いのは
サーブレットとjspを連携
させるパターン
サーブレット⇔jsp間で
POST・GETで数値をやりとり
という概念を理解するのに
なかなか苦労した
っていうかPHPだったら
こんなに苦もなく
htmlに組み込んで書けるのに
とは思うけど今は
いろんな言語を覚えることが
きっと何かの役にたつ(はず)
で、いろいろ試行錯誤して考えたのが
可変の2次元配列でデータ受け渡し
2次元配列というと
String[][]
あたりが思い浮かぶけど
これは先に上限値を設定
しないといけないので
個人的には使いにくい
なので
ArrayList<ArrayList<String>>
可変の2次元配列を使用して
java側でDBのデータを取得し
サーブレットに送った上で
jspに渡したり
jspからPOST・GETで送られた
データをサーブレットで
2次元配列として受け取ったり
具体的にはjsp側で
<form method="post"> <input type='text' name='y[]' value=''> <input type='text' name='z[]' value=''> <input type="submit" name="submit" value="submit"> </form>
的なかんじで
配列のデータをPOSTで送る
サーブレットでは
public static ArrayList<ArrayList<String>> x; … ArrayList<String> xx = new ArrayList<String>(); if なんちゃらかんちゃら for なんちゃらかんちゃら xx.add(request.getParameterValues("y[i]")); xx.add(request.getParameterValues("z[i]")); … x.add(xx);
的なかんじで
受け取ったPOSTの配列を
可変2次元配列に格納する
受け取ったデータを表示すると
なぜか重複して送られてきている…
エラーはでてない
原因として目がいくのは
ifとかforのあたりなわけで
何度も見直したけど
たぶん間違いはない
よくよく挙動を見ると
1回目のSubmitでは
正常なデータで
2回目のSubmitで
重複したデータ
いつも2回目でおかしいと
思って止めてしまっていて
謎が解けなかったけど
3回目で送信すると
データが3重になった!
ということでやっと
変数が初期化されていない
ことに気づく
public static ArrayList<ArrayList<String>> x; … x = new ArrayList<ArrayList<String>>(); ArrayList<String> xx = new ArrayList<String>(); if なんちゃらかんちゃら for なんちゃらかんちゃら xx.add(request.getParameterValues("y[i]")); xx.add(request.getParameterValues("z[i]")); … x.add(xx);
変数を初期化する
new ~ を追加して
やっと解決
これで費やした時間
実に約1日…
とりあえず動けばいいや的なノリで
コードを書いてしまうことが多くて
変数の宣言やら初期化やら
はしょってしまうことがあるのですが
やっぱりそれぞれにちゃんと
意味があって
まずは教科書通りにやらないと
時間を無駄にするんだなぁ、と教訓