SHOEISHA iD

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

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

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

続 Struts 2入門

Struts 2のインターセプタによるパラメータ操作とデバッグ機能

続 Struts 2入門(4)

(2) ScopedModelDrivenInterceptor

 ScopedModelDrivenを実装することで、設定したスコープ(コンテキスト、セッション、リクエスト)にてmodelインスタンスを扱い、setModel()にて実装した内容からインスタンスを取得することができます。ModelDrivenInterceptorと類似していますが、必須となるフィールド、メソッド、ならびに設定しなければならない項目が異なります。Actionクラスのサンプルを以下に示します。

リスト2 ScopedModelDrivenSample.java(抜粋)
/**
 * ScopedModelDriven実装=implements ScopedModelDriven<モデルクラス>…(A)
 */
public class ScopedModelDrivenSample extends ActionSupport implements ScopedModelDriven<ModelDrivenSample> {
    private static Logger log = Logger.getLogger(ScopedModelDrivenSample.class);

    @Action(value="start")
    public String start() throws Exception {
        return "success";
    }

    @Action(
        value="execute" ,
        interceptorRefs= {
            // ScopedModelDriven設定をscopedModelDriven.パラメータ名で指定 …(B)
            @InterceptorRef(value="defaultStack" ,
                            params={"scopedModelDriven.scope", "session" , "scopedModelDriven.name" , "sesModel"}),
        }
    )
    public String execute() throws Exception {
        log.debug(model.getName());
        log.debug(model.getAddress());
        return "success";
    }

    // scopeKeyとmodelを用意し、set/getを用意する …(C)
    public String getScopeKey() {
        return scopeKey;
    }
    public void setModel(ModelDrivenSample model) {
        this.model = model;
    }
    public void setScopeKey(String scopeKey) {
        this.scopeKey = scopeKey;
    }
    public ModelDrivenSample getModel() {
        return model;
    }
    private String scopeKey;
    private ModelDrivenSample model;
}

 重要な点は以下の3つです。

  • (A)Actionクラスの宣言部のScopedModelDrivenの< >内にてパラメータをバインドするクラスも宣言する
  • (B)(A)にて宣言したクラスを扱うためにmodelフィールドと、バインドするキー名を自動設定するためにscopeKeyフィールドを用意する
  • (C)必要に応じて、(B)で設定するキー名とバインドするスコープを定義する。

 今回の設定では、defaultStack内にあるScopedModelDrivenインターセプタに対して行いますので、このようなやや特殊な記述になります。ScopedModelDrivenインターセプタへ渡すパラメータは、scopedModelDriven.以降の値になります。

表1 ScopedModelDrivenインターセプタの設定値
項目名 説明
scope String バインド先属性。context,session,requestから指定
name String バインドする際のキー名

 先ほどの例では、セッション属性に対して、sesModelのキー名でModelDrivenSampleクラスがバインドされることになります。

 ではサンプルを起動させてみます。「http://127.0.0.1:8080/interceptors/scopedmodel/execute.action」を表示します。ModelDrivenインターセプタ同様に値を入力し、「送信する」ボタンを押すことでScopedModelDrivenインターセプタが稼動します。

図2 セッション管理インターセプタの確認画面
図2 セッション管理インターセプタの確認画面

次のページ
(3) ParametersInterceptor

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

続 Struts 2入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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/5192 2010/06/17 14:00

イベント

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

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

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

メールバックナンバー