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

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

スポンサーサイト

--.--.-- (--)  スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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();

(~中略)

    }
}




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

スポンサーサイト

コメント


管理者のみに表示

トラックバック

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。