目次へ

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

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp