エンタープライズ:特集 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」ファイルにフォワードされるという具合だ。


今回は、ひとつのforward要素しか定義していないが、forward要素は複数定義することもできる。たとえば、「正常に完了したときのフォワード先」、「エラーがあったときのフォワード先」の2つのforward要素を用意しておき、executeメソッド内で、どちらを返すかによってフォワード先を変更することもできる。

 残る第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]