初めて自分の家と他人の家が違う、と意識した時

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>

A 回答 (4件)

<input type=input name=a[] value="1">


<input type=input name=a[] value="2">
のように順次入れていった場合

String a[] = req.getParameterValues("a[]");
これでいけました
String[] a
じゃないのがポイントのようです
    • good
    • 2

 直接配列として扱うのではなく、配列っぽく扱えるようなメソッドを実装して使うのが一番いいと思います。


以下の例は、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"); };

};

}
    • good
    • 0

答えた後で思ったのですが


name=a[1]を単なる文字列の"a[1]"ではなくa[]の配列として取得
できないと回答の意味がないですよね。

getParameterValues()ですとString[]として受け取れるのですが
MULTIPLEのSELECTで複数選択されたものを取得可能にするものですし
getParameterNames()でEnumerationとして受け取るしかないように
思います。
    • good
    • 0
この回答へのお礼

いろんな方法があるんですね。ありがとうございます。
教えていただいた、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));
}
ではパフォーマンスが遅そうなので・・・

お礼日時:2003/03/21 00:59

こういうことでしょうか?



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){}
 }
}
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報