SHOEISHA iD

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

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

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

Struts 2入門(8)~Struts2で構築するToDoアプリケーション~

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

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

Actionクラスの構造

 通常、ログインを行うのは一度きりですので、ログイン状態やユーザー情報は、各画面をまたがって保持する必要があります。そのため、ログイン状態やユーザー情報は、セッションに保存するのが一般的です。

 今回のアプリケーションでは、前回説明したModelDriven構成を用い、ScopedModelDrivenインターフェイスを実装することで、ユーザー情報をセッション単位に保持しています。

 また、ログイン情報は、各画面の処理に必要ですので、ログイン情報を持つクラスを親クラスとして、各Actionクラスは、それを継承する形としています。

 ScopedModelDrivenインターフェイスの実装は、親クラスで行います。

[リスト1]ToDoBaseAction.javaの一部
public class ToDoBaseAction extends ActionSupport implements
        ScopedModelDriven<LoginModel> {

    protected LoginModel user; // LoginModelクラス
    private String scopeKey;   // セッションでのModelオブジェクト識別キー

    ...中略...
}

 LoginModelオブジェクトがModelオブジェクトです。

[リスト2]LoginModelクラスのフィールド
public class LoginModel {

    private String userid;
    private String password;
    private String username;

    private int state = -1;

    ...中略...
}

 LoginModelクラスのフィールド、stateが、ログイン状態を表す変数です。初期値は-1で、ログインが完了した場合には1をセットしています。

バリデーション

 ModelDrivenの場合のバリデーションですが、フィールドの各変数に対して、以前紹介したアノテーションを用いた方法では動作しないようです。今回は、ActionSupportクラスで定義されているvalidateメソッドをオーバーライドする方法をとりました。

 validateメソッドは、Actionメソッドが実行される直前に呼び出されるメソッドです。また定義したActionメソッドすべてにおいて、validateメソッドが呼び出されます。バリデーション処理を行いたくないメソッドがある場合には、Actionクラスを分割した方がいいでしょう。今回のアプリケーションでも、機能単位でActionクラスをわけています。

[リスト3]ToDoBaseAction.javaの一部
public class ToDoBaseAction extends ActionSupport implements
        ScopedModelDriven<LoginModel> {

    public void validate() {

        // ログイン済み?
        if (this.user.getState() != 1) {
            addActionError("ログインしてください");
        }
    }
    ...中略...
}

 ToDoBaseActionクラスでは、デフォルトとなるバリデーションを定義しています。ログイン状態をチェックし、未ログインであれば、addActionErrorメソッドでメッセージをセットします。このメッセージが登録されれば、Actionメソッドで定義された処理はスキップされ、ActionメソッドのResult値として、"input"が返されます。なお、登録されたメッセージをJSPで表示するには、<s:actionerror>タグを用います。

 アノテーションによるResult定義は、親クラスではなく、実際のインスタンスとなる派生クラスで行います。ログイン処理を行うActionクラスのToDoLoginActionでは、次のように定義しています。

[リスト4]ToDoLoginAction.javaの一部
@Results({
    @Result(name = "input", location = "login.jsp"),
    @Result(name = "todo", location = "todo", type = "chain")
})
public class ToDoLoginAction extends ToDoBaseAction {

    private static final long serialVersionUID = 1L;

    // バリデーション
    @Override
    public void validate() {

        // ログイン済みなら何もしない
        if (this.user.getState() == 1) return;

        if (this.user.getUserid() == null
                || (this.user.getUserid().length() == 0 && this.user
                        .getPassword().length() == 0)) {
            addActionError("ログインしてください");
            return;
        }

        if (this.user.getUserid().length() == 0) {
            addActionError("ユーザーIDを入力してください。");
        }
        if (this.user.getPassword().length() == 0) {
            addActionError("パスワードを入力してください。");
        }
    }
    ...中略...
}

次のページ
Actionメソッドの処理

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

  • 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 X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング