Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/23 14:00

Struts解説第3回の本稿は、引き続き入力フォームをもつアプリケーションを使って、バリデーションとプロパティファイルによるメッセージ管理について解説します。

目次

はじめに

 「Apache Struts」(以下、Struts)とは、サーバサイドJava開発のデファクトスタンダードとしてあまりにも有名なオープンソースのWebアプリケーション・フレームワークです。本連載は、実際に動作するアプリケーションをもとに、Strutsの次世代バージョンであるStruts 2を解説していきます。第3回目の本稿は、前回の「バリデーションの仕組みを理解する」の後編として、バリデーションロジックを自前で記述する方法と、メッセージのローカライズ方法を中心に解説していきます。

前回の記事

対象読者

 サーバサイドJava(JSP&サーブレット)について基本的なことを理解している方を対象とします。

バリデーション・ロジックの組み込み

 前回解説したように、Struts 2には多くのバリデーション処理があらかじめ定義されています。しかし、実際のアプリケーションでは複数のフィールドにまたがるバリデーション処理など、Struts 2の機能だけでは対応できないことも多いかと思います。そのような場合には、自分でバリデーション・ロジックを実装することになります。

 Struts 2でActionクラスに独自のバリデーション・ロジックを組み込む際は、validateというメソッドの実装を行います。次のサンプルコードは、前回のActionクラス、Researchクラスに、バリデーション・ロジックを追加する例です。バリデーション処理自体は、ごく単純なサンプルですので、特に説明は不要でしょう。

バリデーション・ロジックを追加したResearch.java
public class Research extends ActionSupport {

    // 追加のvalidateの実装
    public void validate() {

        if ( name == null || name.length() == 0 ) {
            addActionError("名前を入力してください");
        }
        if ( email==null || email.length() == 0 ) {
            addActionError("メールアドレスを入力してください");
        }
        if ( age < 18 || age > 99 ) {
            addActionError("18歳以上(99歳以下)の方が対象です");
        }
        if ( career == null ) {
            addActionError("キャリアを選択してください");
        }
    }
}

 validateメソッドは、Struts 2で定義されているValidatableインターフェイスの実装です。このメソッドが実装されている場合、Actionメソッドが呼び出される前に、その処理が自動的に実行されるようになっています。

 各バリデーション処理でエラーとなったら、addActionErrorメソッドで、エラー用のメッセージを追加します。このメソッドは、親クラスで用意されているエラーメッセージ用のコレクションに、指定した文字列を追加します。

 エラーの発生は、このコレクションのデータの有無で判断しています。エラーがあると判断された場合、Actionメソッドの処理はスキップされ、メソッドの戻り値としてinputという値が返されます。

JSP側でのエラーメッセージ表示

 addActionErrorメソッドで追加したエラー表示用のメッセージをJSPで参照する場合は、<s:actionerror>タグを用います。前回の「research.jsp」に、このタグを追加すると、次のようになります。

research.jspの抜粋
<body>

<s:actionerror />

<s:form action="Research">
<s:textfield label="名前" name="name"/>
<s:textfield label="メールアドレス" name="email" />
<s:textfield label="年齢" name="age"/>
<s:radio label="どの携帯のCMが好き?" name="career"
 list="#{'1':'ドコモ', '2':'au', '3':'ソフトバンク'}"/>
<s:submit value="確認" action="ResearchConfirmPart3" />
</s:form>

</body><html>

 <s:actionerror>タグを用いると、自動的にメッセージが<ul><li>タグでのリスト表示として出力されます。なお、これはたとえ表示テーマがsimpleであっても、そうなります。これを回避するためには、テーマ(テンプレート)を独自に編集する必要があるようです。

もう1つのメッセージ表示
 addActionErrorメソッドは、エラーメッセージの保持に用いるのですが、それとよく似た、addActionMessageというメソッドも用意されています。このメソッドを用いた場合は、JSPでは<s:actionmessage />タグでメッセージの参照を行います。Errorという文言がついていないことから分かるように、このメソッドでメッセージを追加した場合は、通常どおりActionメソッドが実行されますし、エラー扱いにはなりません。なお、JSPでの表示はエラーメッセージと同様のリスト表示となります。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

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

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

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

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5