エンタープライズ:特集 | 2003/11/28 15:30:00 更新 |
特集:第2回 実用サンプルコードで理解する「Struts」の基礎 (5/15)
Actionクラスの実装
次に、Actionサブクラスとなる「KeijiWriteActionクラス」を実装していこう。
Strutsでは、「SUBMIT」ボタンが押されると、まず先に示した入力フォームを処理するKeijiWriteFormオブジェクトを作成する。そして、KeijiWriteActionクラスのexecuteメソッドを呼び出すのだ。executeメソッドの書式は、次のようになる。
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) |
ここで挙げる第2引数のformは、KeijiWriteFormオブジェクトである。ActionForwardメソッドが呼び出された際には、すでにKeijiWriteFormオブジェクトの必要な「setter」が呼び出され、入力フォームに入力されたデータが格納されている。List 4では、setterが呼び出された際に値を保持し、「getter」が呼び出された場合にsetterで設定された値を返すよう実装してある。
例えば、次のように第2引数をKeijiWriteFormにキャストしてgetUsernameメソッドを呼び出せば、ユーザーがusernameという名称の入力フィールドに入れた値を取得できるのだ。
// キャストする KeijiWriteForm kform = (KeijiWriteForm)form; String username = kform.gerUsername(); |
ActionForwardメソッドの第1引数は、クライアントに結果を返すために使われるActionMappingオブジェクトだ。
ActionMappingメソッドには「findForwardメソッド」があり、このメソッドを呼び出すと、「struts-config.xml」ファイル中に定義したforward要素を探し出し、そこにフォワードするためのActionForwardオブジェクトを返す機能を備えている。List 3では、次のようにaction要素を定義していることが分かるだろう。
9: <action path="/Write" type="sample.keiji.KeijiWriteAction" 10: name="KeijiWriteForm" scope="request" validate="false"> 11: <forward name="success" path="/pages/KeijiWriteSuccess.jsp"/> 12: </action> |
この際、第1引数に渡されたActionForwardオブジェクトのfindForwardメソッドを次のように呼び出し、戻り値にして返す。
return mapping.findForward("success"); |
すると、forward要素でsuccessという名前で定義した「KeijiWriteSuccess.jsp」ファイルにフォワードされるという具合だ。
|
残る第3、4引数は、特集「Tomcatで知るJSP/サーブレットの基礎」でも解説した「HttpServletRequestオブジェクトとHttpServletResponseオブジェクト」だ。
例えば、Cookieの情報を読み書きしたい場合や、バイナリデータをクライアントに返したい際には、これらのオブジェクトを使って操作する。またエラーを返したい場合にも、これらのオブジェクトを適時利用する。
今回の記事では、KeijiWriteActionクラスで入力フォームに入った掲示板への投稿データをデータベースに登録する処理をしたい。そこで、KeijiWriteActionクラスのexecuteメソッドの処理は、概ね、次のようになる。
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { // キャストする KeijiWriteForm kform = (KeijiWriteForm)form; // データベースに書き込む処理をする // kform.getusername、kform.email、kform.title、kform.msgのそれぞれを // データベースに書き込む // 結果としてkeijiwritesuccess.jspファイルにフォワードする return mapping.findForward("success"); } |
前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ
[大澤文孝,ITmedia]