とある社畜(♀)のダイエット記録~プログラミングもあるよ~

新米SEのレコーディングダイエットの変遷、料理、プログラミング備忘録な雑多ブログです。

ActionFormってサーブレットでどう受け取るの?

2013.03.20 (Wed)  Struts_ハマったこと
【jspから返されたActionFormをサーブレットで受け取れない】

まだActionFormの概念がよく分かってなかった頃に躓いたとこです。
引数で持ってきてるのになぜ直に扱えないんだー!となってました。下記の「form」の部分です。




class SumpleAction extends Action{

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res){

form.getName(); //←コンパイルエラーになる

(~中略)

    }
}




formとして送られてくる想定の型にはちゃんとgetNameメソッドがあるのに、formから直にそのメソッドを呼び出そうとすると上手くいきません。
なぜなら、ここでformは「ActionForm」というabstract(抽象的)なクラスとして定義されているからなのです。
つまり実体が無いので、そのままでは受け取っても処理が出来ません。処理したい独自のActionFormにキャストしてあげる必要があります。

例えば「UserForm」という型として送られてくる想定なら

UserForm userform = (UserForm)form


こうしてあげれば、UserFormとしてサーブレット内で処理が出来るようになります。




class SumpleAction extends Action{

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res){

UserForm userform = (UserForm)form //←型変更(キャスト)する
userform.getName();

(~中略)

    }
}




これでうまくいきました(´∀`)

コメント


管理者のみに表示

トラックバック