Struts 2章 ActionForm
- 2.1. ActionFormの実装
- 2.2. ActionFormの設定
- 2.3. Actionクラスでの利用
- 2.4. パラメータ値の受け取り
- 2.5. ActionFormのresetメソッド
2.3. Actionクラスでの利用
ActionクラスにおけるActionFormの利用は簡単です。executeメソッドの引数として渡されるので、それをキャストして利用するだけです。以下のようにします。
package sample;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class ProductInputAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
ProductForm productForm=(ProductForm)form;
String name=productForm.getName();
int price=productForm.getPrice();
...
return(mapping.findForward("input"));
}
}
WebページのFormから値が送信されてきている場合には、ProductFormに自動的に値が設定されます。そうでない場合にもインスタンスは生成され、executeメソッドに渡されます。その場合、インスタンスは初期化された状態のままとなっています。
最後に1つ注意点があります。ActionFormはデフォルトでは英語以外に対応していません。つまり日本語の入力値を受け取っても、日本語と識別せず変換を行いません(文字化けをする)。これを回避するためには、以下のように幾つか方法があります。
- HttpServletRequestの文字コードを設定する(setCharacterEncodingメソッドを呼び出す)フィルタを使用する
- ActionFormのsetterメソッドで以下のようにする
public void setText(String text){ this.text=new String(text.getBytes("8859_1"),"[入力ページの文字コード]"); } - ActionFormのresetメソッドをオーバーライドし、その中でHttpServletRequestのsetCharacterEncodingメソッドを呼び出す
フィルタに対応していないバージョンを使用するなどの理由がなければ、フィルタを利用する方法が最も良いでしょう。
(実習課題2)
実習課題1のActionFormを用いて以下のWebアプリケーションを作成しなさい。
- 入力ページと出力ページを持ち、入力ページで社員データを入力する。出力ページでは社員データの表示を行う。
- 社員データの受け渡しには、必ずActionFormを使用すること。
- 日本語の入力値にも対応する事。

