- 締切済み
Servletへフォームから配列を送信できますか?
PHPでは、下記のようにHTMLを記述することで、 フォーム内容を配列で送信及び取得できるのですが、 Servletで同じ事をするにはどうすれば良いでしょうか? <HTML><title>一括更新</title><BODY> <form action=./test.php method=post> <table> <tr><td> <input type=input name=a[0] value="1"> <input type=input name=b[0] value="2"> </td></tr> <tr><td> <input type=input name=a[1] value="1"> <input type=input name=b[1] value="2"> </td></tr> </table> <input type="submit" value="更新"> </form></BODY></HTML>
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- muhakaka
- ベストアンサー率0% (0/0)
<input type=input name=a[] value="1"> <input type=input name=a[] value="2"> のように順次入れていった場合 String a[] = req.getParameterValues("a[]"); これでいけました String[] a じゃないのがポイントのようです
- ssr-y6
- ベストアンサー率71% (5/7)
直接配列として扱うのではなく、配列っぽく扱えるようなメソッドを実装して使うのが一番いいと思います。 以下の例は、100*3個のパラメータを受け取って、その結果を表示するページHTMLとサーブレットです。 -----ページHTML----- <html> <head><title>Param Array</title></head> <body> <form action="http://localhost:8080/minnaservlet/503076" method="POST"> <table border="1"> <tr><th></th><th>a</th><th>b</th><th>c</th></tr> <script> var i, j; var an = new Array("a", "b", "c"); for (i = 0; i < 100; i ++) { document.write("<tr><td>" + i + "</td>"); for (j = 0; j < 3; j ++) document.write("<td>" + an[j] + "<input type='text' name='" + an[j] + i + "' value='" + j + "'></td>"); document.writeln("</tr>"); }; </script> </table> <input type="submit" value="send"> </form> </body> </html> -----サーブレット----- package qa503076; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class paramarray extends HttpServlet { private HttpServletRequest Req; private PrintWriter PW; private void p(String s) { PW.println(s); }; private String gp(String s, int n) { return(Req.getParameter(s + Integer.toString(n))); }; private String a(int n) { return(gp("a", n)); }; private String b(int n) { return(gp("b", n)); }; private String c(int n) { return(gp("c", n)); }; public void doPost(HttpServletRequest req, HttpServletResponse res) { try { Req = req; res.setContentType("text/html"); PW = res.getWriter(); p("<html><head><title>Input Result</title></head>"); p("<body>"); p("<table border='1'>"); p("<tr><th></th><th>a</th><th>b</th><th>c</th></tr>"); for (int i = 0; i < 100; i ++) { p("<tr>"); p("<td>"+Integer.toString(i)+"</td>"); p("<td>a="+a(i)+"</td><td>b="+b(i)+"</td><td>c="+c(i)+"</td>"); p("</tr>"); }; p("</body></html>"); } catch (Exception ex) { System.out.println(ex.toString()+ "::Post"); }; }; }
- jakarta
- ベストアンサー率38% (607/1597)
答えた後で思ったのですが name=a[1]を単なる文字列の"a[1]"ではなくa[]の配列として取得 できないと回答の意味がないですよね。 getParameterValues()ですとString[]として受け取れるのですが MULTIPLEのSELECTで複数選択されたものを取得可能にするものですし getParameterNames()でEnumerationとして受け取るしかないように 思います。
- jakarta
- ベストアンサー率38% (607/1597)
こういうことでしょうか? import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class test extends HttpServlet{ public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ res.setContentType("text/html; charset=shift_jis"); PrintWriter out = res.getWriter(); out.println("<html><body>"); out.println( "a[0]=" +req.getParameter("a[0]") +"<br>"+"b[0]=" +req.getParameter("b[0]") +"<br>"+"a[1]=" +req.getParameter("a[1]") +"<br>"+"b[1]=" +req.getParameter("b[1]")); out.println("</body></html>"); }catch(Exception e){} } }
お礼
いろんな方法があるんですね。ありがとうございます。 教えていただいた、getParameterValues()を検索してみたところ、 RequestParameters params = new RequestParameters(request); Enumeration e = params.getParameterNames(); while( e.hasMoreElements() ){ ...... } な受取り方がありました。ただ、順不同な受け取りだと、入力行単位でDBの各レコードをUPDATEするのは難しいのかなと思います。 複数行の入力データを一括で更新する場合、一般的にどんな手法を取るのでしょうか? HTMLを <input type=input name=a1 value="1"> <input type=input name=b1 value="2"> <input type=input name=a2 value="1"> <input type=input name=b2 value="2"> Servletで、 for(int i=0;i<=recCount;i++) { request.getParameter("a" + String.valueOf(i)); request.getParameter("b" + String.valueOf(i)); } ではパフォーマンスが遅そうなので・・・