Ajax.Requestでのフォームデータ送信サンプル(postBodyへの設定)

Ajax.Requestでのフォームデータ送信サンプルを載せておきます。ポイントはForm.serializeメソッドです。これがフォーム内容をpostBodyプロパティに適合した文字列に変換してくれます。

[test.htm]UTF-8で記述
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script language="javascript" src="./prototype.js" charset="utf-8"></script>
<script language="javascript">
function test(fm){
  new Ajax.Request('test.jsp', {
    method : 'post',
    postBody : Form.serialize(fm),//Form.serializeメソッドを使う
    onComplete : function(req){
      $('test').innerHTML = req.responseText;
    }
  });
}
</script>
</head>
<body>
<form>
<input type="text" name="TEXT" value="テキストボックス"/>
<textarea name="TEXTAREA">テキストエリア</textarea>
<input type="checkbox" name="CHECKBOX" value="CHECKED!" checked/>
<input type="radio" name="RADIO" value="RADIO1" checked/>
<input type="radio" name="RADIO" value="RADIO2"/>
<select name="SELECT">
  <option value="OPTION1">オプション1</option>
  <option value="OPTION2" selected>オプション2</option>
  <option value="OPTION3">オプション3</option>
  <option value="OPTION4">オプション4</option>
</select>
<select size="3" name="SELECTSIZE" multiple>
  <option value="OPTION1" selected>オプション1</option>
  <option value="OPTION2">オプション2</option>
  <option value="OPTION3" selected>オプション3</option>
  <option value="OPTION4">オプション4</option>
</select>
<button onclick="test(this.form);">TEST</button>
</form>
<div id="test"></div>
</body>
</html>
[test.jsp]UTF-8で記述
<%@ page contentType="text/plain;charset=utf-8" %>
<%@ page import="java.util.*, java.io.*" %>
<%!
//2バイト文字Unicode変換
public String strEncode(String strVal)
  throws UnsupportedEncodingException{
  if(strVal == null){
    return ( null);
  }else{
    return (new String(strVal.getBytes("ISO-8859-1"), "UTF-8"));
  }
}
%>
<%
//キャッシュ無効化
Calendar today = new GregorianCalendar();
response.setDateHeader("Last-Modified", today.getTime().getTime());
response.setDateHeader("Expires", 0);
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");

//受信フォーム内容すべてをテーブルに書き出す
Map parameterMap = request.getParameterMap();
out.print("<table border><tr><th>key</th><th>value</th></tr>");
if(parameterMap != null){ 
  for ( Iterator i = parameterMap.keySet().iterator(); i.hasNext();) {
    String key = (String)i.next();
    String[] values = (String[])parameterMap.get(key);
    String str = "";
    if(values != null){ 
      for(int j = 0; j < values.length; j++){ 
        str += strEncode(values[j]) + ",";
      } 
    } 
    out.print("<tr><td>" + key + "</td><td>" + str + "</td></tr>");
  }
}
out.print("</table>");
%>