SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

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

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


クライアントサイド(JavaScript)

 いくつかのバリデーションは、JavaScriptを用いたクライアントサイドでの実行とすることもできます。その設定方法は、ごく簡単で、JSPファイルの<s:form>タグにvalidate="true"という属性を追加するだけです。それだけで必要なJavaScriptをStruts 2が自動で生成してくれます。

 ただしこの場合、複数のsubmitごとに別のバリデーション設定はできません。1つのフォームには、複数のsubmitがあっても1つだけの設定となります。research.jspの場合は、<s:form>タグを次のように変更するだけです。

<s:form action="ResearchConfirm" validate="true">
~省略~
<s:submit value="確認"/>
</s:form>

 クライアントサイドでのバリデーションがサポートされているのは、以下のタイプのみとなります。これらのJavaScriptのコードは、Struts 2のソースコードの「\src\core\src\main\resources\template\xhtml\form-close-validate.ft」lに記述されています。

  • required
  • requiredstring
  • stringlength
  • regex
  • email
  • url
  • int
  • double

 なお、表示テーマの設定が「simple」の場合は、クライアントサイドのバリデーション機能は使えません。

アノテーションでの定義

 アノテーションとは、Javaのソースファイルにメタデータとして注釈を記入できる機能のことです。Struts 2では、この機能を使ってXML設定ファイルの替わりにバリデーション設定をソースファイルに記述できます。この場合は前述のようなXMLファイルは不要です。

 記述の仕方には、クラス定義の前に、@Validations()としてまとめて書く方法と、個別のアクセッサの前に書く方法があります。

クラス単位に書く方法

 クラス定義の前に、アノテーションを追加します。また、バリデーション用のパッケージをimportしておきます。

Research.java(抜粋)
package part2a;
import com.opensymphony.xwork2.validator.annotations.*;
import org.apache.struts2.interceptor.validation.SkipValidation;

@Validations(
        requiredStrings = {
                @RequiredStringValidator(
                    fieldName="email",
                    message="名前を入力してください")
        },
        emails = {
                @EmailValidator(
                    fieldName="email",
                    message="有効なメールアドレスを入力してください")
        }
)

public class Research extends ActionSupport {

    ~途中省略~

@SkipValidation
public String execute() throws Exception {

    ~以下省略~

 @Validationsの上記以外のパラメータには「requiredFields」「dateRangeFields」「intRangeFields」「urls」「regexFields」などがあります。また、アノテーションバリデータには、「@RequiredStringValidator」「@IntRangeFieldValidator」などがあります。

 XMLファイルでの定義とは書式が少し異なるだけで、実質的な内容には違いがありません。ここでの詳細は割愛しますので、詳しくはリファレンスを参照してください。

 @SkipValidationとは、文字通りバリデーションを行わないようにするための設定です。アノテーションとして記述した場合はすべてのメソッドの実行前にバリデーションが行われてしまいます。最初のAction(Research.action)ではページを表示するだけでよいので、不要なバリデーションが実行されないようにexecute()メソッドの前に@SkipValidationを追加しています。

アクセッサ単位に書く方法

 アクセッサごとに書く場合は、クラス定義の前に@Validationだけを記述します。そして、アクセッサの前にバリデータの定義を記述します。この場合でも@SkipValidationの指定は必要です。

Research.java(抜粋)
@Validation
public class Research extends ActionSupport {

    @RequiredStringValidator(message="名前を入力してください" )
    public String getName(){ return name; }
    public void setName(String name){ this.name = name; }

    @IntRangeFieldValidator(min = "18", max = "99",
     message = "${min}歳以上(${max}歳以下)の方が対象です(入力値:${age}歳)")
    public int getAge(){ return age; }
    public void setAge(int age){ this.age = age; }

    @RequiredFieldValidator(message = "選択してください")
    public String getCareer(){ return career; }
    public void setCareer(String career){ this.career = career; }
    
    @SkipValidation
    public String execute() throws Exception {

    ~以下省略~

今回追加したバリデーション

 以上がStruts 2で用意されているバリデーションの追加方法です。もう1つの自前でロジックを実装する方法は、次回解説することにします。

まとめ

 今回は、基本の入力フォームアプリケーションと、バリデーションの基本的な仕組みについて説明しました。Struts 2では、ちょっとした記述を追加するだけでバリデーション機能が利用できるようになります。特にアノテーションのおかげでActionクラスに処理をひとまとめに記述できますので、以前のStrutsより分かりやすいコードが書けるようになっています。また、Struts 2のバリデータも一覧表のとおり多くのものが提供されています。ぜひ実際にコードを書いてみて、いろいろと試してみてください。

参考資料

  1. Apache Struts
  2. Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワーク
  3. 【特集】実践サンプルで学ぶStruts 2 - 生まれ変わった定番フレームワークを徹底解説:マイコミジャーナル
  4. Struts2を使ってみる
  5. ITの現場-Java,Flex,Strus2,Spring2,Hibernate3,Ajax,PHP
  6. OGNLガイド:Seasar - DI Container with AOP
  7. Struts2入門」(川崎克巳 著 、オンライン書籍)
  8. サーブレット&JSP逆引き大全650の極意 改訂第3版」(川崎克巳 著、秀和システム、2007年12月)

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
作りながら学ぶ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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2391 2008/08/19 19:58

イベント

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

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

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

メールバックナンバー