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を使用すること。
- 日本語の入力値にも対応する事。