■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2008年06月01日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.106

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.Strutsのアプリケーション開発
========================================================


では、続いてSimpleActionFormクラスのソース・コードを見てみましょう。

まず、このクラスは、

--------------------------------------------------------
public class SimpleActionForm extends ActionForm {
--------------------------------------------------------

と書いてある通り、ActionFormのサブクラスとして作成されていることを
頭に入れておいてください。

そして、このクラスの上のほうには、

--------------------------------------------------------
    /** Name */
    private String name = null;

    /** Secret */
    private String secret = null;

    /** Color */
    private String color = null;

    /** Confirm */
    private boolean confirm = false;

    /** Rating */
    private String rating = null;

    /** Message */
    private String message = null;

    /** Hidden */
    private String hidden = null;
--------------------------------------------------------

というようにフィールド定義が並んでいますが、これらのフィールドに対する
setter、getterの定義が下のほうにあります。以前JavaBeansの説明をしたとき
に習った通り、これらはBeanのプロパティーを定義するものですね。

これらのプロパティーは、Simple.jsp(/jsp/simple/Simple.jsp)の中のいくつ
かのタグにあったproperty属性に対応しています。
たとえば、Simple.jspの中には

<html:text property="name" size="40" maxlength="50"/>

というのがありましたが、このpropertyの値"name"がSimpleActionFormのname
プロパティーに対応しています。

ActionServletは、requestオブジェクトから取り出したFORMのデータを、それぞれ
これらのpropertyの値と一致するプロパティーを探すことによって(その
setterメソッドを呼び出して)ActionForm(のサブクラスとして作成されて
いるBean)のプロパティーに設定したあと、Actionクラス(のサブクラスとして
作成されているクラス)のexecute()メソッドを呼び出し、その引数にActionForm
(のサブクラスとして作成されているBean)を渡します。
これは、struts-config.xmlの指定にしたがって行われますので、前回お話した
ように、struts-config.xmlの中に

--------------------------------------------------------
        <action path="/processSimple"
                type="examples.simple.ProcessSimpleAction"
                name="simpleForm"
                scope="request"
                input="/jsp/simple/Simple.jsp"
                cancellable="true"
                validate="true">
            <forward name="success" path="/jsp/simple/SimpleResults.jsp"/>
        </action>
--------------------------------------------------------

という記述があると、FORMのデータをsimpleFormすなわちSimpleActionFormの
インスタンス(Bean)の各プロパティーに設定し、それをProcessSimpleActionの
execute()メソッドの引数に渡すことになります。

なお、struts-config.xmlでvalidate="true"になっている場合、Actionクラス(ここ
ではProcessSimpleAction)のexecute()メソッドが呼び出される前に、ActionForm
(ここではname="simpleForm"で指定されているsimpleForm=SimpleActionFormの
インスタンス)のvalidate()メソッドが実行されることになっています。


では、そのvalidate()メソッドを見てみましょう。SimpleActionFormクラスのソース・コード
の真ん中あたりに下記のようにコーディングされています。

--------------------------------------------------------
    public ActionErrors validate(
        ActionMapping mapping,
        HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();

        // Name must be entered
        if ((name == null) || (name.length() < 1)) {
            errors.add("name", new ActionMessage("errors.name.required"));
        }

        // Secret Phrase must be entered
        if ((secret == null) || (secret.length() < 1)) {
            errors.add("secret", new ActionMessage("errors.secret.required"));
        }

        return (errors);

    }
--------------------------------------------------------

これらは、とりあえずnameプロパティーやsecretプロパティーの値がそれぞれnullか
あるいは値の長さが1より小さい(つまり0)のときにエラー・メッセージを書くよう
にしていますが、validate()メソッドの詳細については、また後ほど詳しくお話いた
します。



(続く)


では、今日はここまでにします。

何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2008 Future Lifestyle Inc. 不許無断複製