作りながら学ぶJavaアプリケーションフレームワーク
WINGSプロジェクト 高江 賢 [著] 山田 祥寛 [監修] 2008/06/23 14:00

サンプルファイル 3424.93 KB

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

1 2 3 4 5 6 7 →

はじめに

 「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での表示はエラーメッセージと同様のリスト表示となります。

プロフィール
WINGSプロジェクト 高江 賢 タカエ ケン

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


プロフィール
山田 祥寛 ヤマダ ヨシヒロ

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。
主な著書に「入門シリーズ(サーバサイドAjax/XMLDB/PEAR/Smarty)」「独習シリーズ(ASP.NET/PHP)」「10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML)」「Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI)」「今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP)」「書き込み式 SQLのドリル」他、著書多数


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト