- ベストアンサー
jsp/Servletの動的に増えるフォーム情報受け取りについて質問です。
動的に増える入力フォームでそのフォームを処理するにはどうすれば良いでしょうか? 具体的には以下のようになります。 for(int i=0; i <= list.size(); i++){ Manager manager = (Manager)List.get(i); <input type="text" name="id<%= manager.getNumber()%>" value="<%= manager.getId()%>"> } ArrayListに格納されているManager型を取り出してArrayListに格納されている数だけフォームを作ってます。 ちなみにManager型のNumberは不変で各Managerに同一の値はありません。 この場合、フォームのnameにはそのManager型のNumberが含まれたidになります。 上記のManager型のNumberが2だとしたらフォームのnameは「id2」みたいに、2の次が5だった場合は…、 っと昇順であってもバラバラな「id + Number」が生成されるようにしています。 この場合、このフォームの値を受け取るにはどうすれば良いでしょうか? for(int i=0; i <= list.size(); i++){ String id = request.getParameter("id" + i); } でも問題なく動作するのですが問題が一つあって…、 勉強不足で申し訳ありませんがご教授・ご鞭撻の程、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
nullの判定は if(request.getParameter("id"+i) == null){ //nullの場合 … }else{ //nullでない場合 … } では?
その他の回答 (2)
- lawson
- ベストアンサー率44% (29/65)
まず、Manager型ってなんでしょうか? 動的にフォームを作成して複数 フォームがブラウザの画面上に表示されたとしても 一度にひとつのフォーム上からしかサブミットは できず、該当フォームの中の部品郡の情報しか リクエストパラメータに含まれないと思います。 普通は、1つのフォームですべて、行い。 フォームの中身の部品を動的に増やすなどして、 必要に応じて、javascriptなどで、 formオブジェクトのaction属性を 都合のよいとび先などに変更すると思います。 サブミットボタンのonsubmitとかで、 そういったロジックを走らせるでしょう。 フォームの中のどの部分の部品に対するリクエストを 処理するかなどの、制御情報などは <input type="hidden" のタグにうめこんで、それをみて、サーブレット側で 処理するようにするとか。 そもそも、フォーム自体を動的に何個も生成しなければ ならない意図がよくわからないです。 そんなことをすると、ロジックが必要以上に複雑に なっていろんな問題がでてきそうでう。
お礼
質問の内容がgoo事務局に一部削除されたため、誤解を招く質問になってしまい申し訳ありません。 Manager型は私の方で製作したクラスです、今回の質問においてはあまり気にしないで下さい(汗 動的にフォームを作成したには訳があります、 変更したい要素を検索して出力後処理するので……。 もちろん出力と同時にフォームのname属性にはfor文で使用した変数を含め、 受け取り側も同じようにしているのでsubmitに関しては問題ありませんでした。 今回は複数の要素を変えたい数だけ効率良く変えれるようにしたかったので一つ一つ処理をする考えは設計時からありませんでした、 一部情報を隠蔽する要素もあるのでhidennを使う考えはセキュリティ上設計時から考えていませんでした。 貴重なご意見ありがとう御座いました、ロジックについては 今後も大きな課題なので効率が良いプログラムを心がけたいと思います。
要するに、名前に規則性がない不特定個のパラメータを処理したい、ということでしょうか。 getParameterで名前を1つずつ指定して取り出すのではなく、getParameterMapで全パラメータをまとめてMapとして取得し、それを処理してはいかがですか? あるいは、getParameterNamesとgetParameterValuesでパラメータ名と値をそれぞれEnumeration/String配列で取得できます。(そのあたりはServletRequestクラスの説明をご覧ください) これらですべてをまとめて取り出し、それから順番に処理をしていけばよいのでは?と思いますが。そういうことでしょうか??
お礼
そんな方法があるとは考えつかなかったです、 getParameterMapなんてものがあったんですか……。 凄く勉強になりました、これからそれを調べて今後の拡張や改善する時などに試してみたいと思います。 これでさらに効率の良いシステムができそうです、 教えて下さってありがとう御座います。 また何か問題がありましたらお知恵を拝借させて下さい。
お礼
goo事務局の方に投稿内容を一部削除されたので中途半端な質問で申し訳御座いませんでした。 質問内容としては検索処理してて抜け番があるので if(request.getParameter("id" + i).equals("null")) でできないと言った意味です。 System.out.println(request.getParameter("id" + i));でnullと表示されるのになぜ?と言った内容です。 ですがpcbeginnerさんの方法でいとも簡単に解決しました。 これで今製作しているシステムが無事に完成しそうです。 教えて下さってありがとう御座います。