SHOEISHA iD

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

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

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

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

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


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

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

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
validateメソッドの注意点

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

  • このエントリーをはてなブックマークに追加
作りながら学ぶ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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2572 2008/08/14 18:32

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング