SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

作りながら学ぶJavaアプリケーションフレームワーク

Struts 2入門(2)~バリデーションの仕組みを理解する(前編)~

作りながら学ぶJavaアプリケーションフレームワーク


  • X ポスト
  • このエントリーをはてなブックマークに追加

サーバサイド(サーブレット)

 Struts 2が提供するバリデーションを利用する場合、当然ながら、その機能を利用することをどこかしらに記述する必要があります。Struts 2ではこの記述の設定は、

  • XMLファイルに定義
  • アノテーション機能をつかってソースファイルに定義

 の2つの方法があります。

XMLファイルでの定義

 これは、Struts 1をご存じの方にはおなじみの方法です。ただ、俗に「XML地獄」と呼ばれるように、XMLファイルでの設定は生産性の低下につながることもあり、あまり多くの設定を記述するのは考えものです。

 XMLファイルは、バリデーションを行いたいActionクラスと同じディレクトリ階層に「Actionクラス名-validation.xml」、または「Actionクラス名-Action名-validation.xml」という名前で配置します。

 今回は、ResearchクラスのResearchConfirmというActionの際に追加しますので、/WEB-INF/src/part2/Research-ResearchConfirm-validation.xmlというファイル名で作成します。

追加xmlファイル
└ /part2
   ├ Research.class
   └ Research-ResearchConfirm-validation.xml

 バリデーションの内容は、以下のようになります。

Research-ResearchConfirm-validation.xml
<!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>

    <!-- 1. 名前フィールドの必須入力チェック -->
    <field name="name">
        <field-validator type="requiredstring">
            <message>名前を入力してください</message>
        </field-validator>
    </field>

    <!-- 2. メールアドレス入力の有効性判断 -->
    <field name="email">
        <field-validator type="email">
            <message>有効なメールアドレスを入力してください</message>
        </field-validator>
    </field>

    <!-- 3. 年齢の範囲チェック -->
    <field name="age">
        <field-validator type="int">
            <param name="min">18</param>
            <param name="max">99</param>
            <message>
      ${min}歳以上(${max}歳以下)の方が対象です。(入力値:${age}歳)
            </message>
        </field-validator>
    </field>

    <!-- 4. 選択肢の必須チェック -->
    <field name="career">
        <field-validator type="required">
            <message>選択してください。</message>
        </field-validator>
    </field>

</validators>

 <field>タグで、入力フィールドごとのバリデーション設定を行います。name属性で、フォームの<s:textfield>などで設定したnameの値を指定します。

 まず、コメント1.のバリデーション内容を説明しましょう。<field-validator>タグは、入力フィールドの検証を示し、type属性により、どういう検証にするかを指定します。type="requiredstring"は、テキスト文字列が入力されているかどうかの検査で、パラメータとしてトリムを行うかどうかの<param name="trim">が指定可能です。デフォルトは<param name="trim">true</param>となっています。入力がない場合、または入力データの長さが0の場合はエラーということで、<message>タグで指定したメッセージが表示されます。

 コメント2.では、type="email"、つまり、入力されたテキストがメールアドレスとして妥当かどうかの判断を行います。

 コメント3.は、type="int"、数値としての検証を行います。<param name="min">と<param name="max">で最小値と最大値の範囲を指定します。いずれかの範囲指定、または両方とも省略が可能です。両方省略した場合は数値として変換できるかどうかの検証のみとなります。なお、メッセージ中の${min}、${max}は最小・最大のパラメータ値に置換され、${フィールド名}は入力値に置換されます。

 コメント4.は、type="required"、つまりラジオボタンのどれかにチェックがされているかどうかの検証となります。

 主なバリデータのタイプと、そのパラメータを以下の表にまとめました。

バリデータ一覧
バリデータのタイプ 検証内容 パラメータ
conversion 型変換の可否検証  
date Date型(日付)としての検証 min: 最小(最も古い)日付
max:最大(最新)日付
double double型としての範囲検証 minInclusive: 最小値
maxInclusive: 最大値
minExclusive: 最小値(minExclusive値は含まない)
maxExclusive: 最大値(maxExclusiv値は含まない)
email メールとしての妥当性検証  
fieldexpression 条件式(OGNL式)での検証  
int 数値型としての検証 min: 最小値
max: 最大値
regex 正規表現での検証 caseSensitive: 大文字小文字を考慮するかどうか
trim: トリムするかどうか
required 必須検証  
requiredstring 文字列の必須入力検証 trim: トリムするかどうか
stringlength 文字列の長さの検証 trim: トリムするかどうか
maxLength: 最大の長さ
minLength: 最小の長さ
url URLとしての妥当性検証  
visitor 外部バリデーションファイルを用いての検証 context: XMLファイル識別名

 バリデーションは、ResearchConfirmアクションのconfirm()メソッド実行の前に、Struts 2により行われています。バリデーション定義した中でいずれかにエラーがあった場合は、confirm()メソッドは実行されません。その代わり、Struts 2により、ResearchConfirmアクションの戻り値として、"input"という値が設定されることになっています。"input"は、入力エラーがあることを示す固定の返値です。

次のページ
クライアントサイド(JavaScript)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
作りながら学ぶJavaアプリケーションフレームワーク連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2391 2008/08/19 19:58

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング