SHOEISHA iD

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

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

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

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~小さなライブラリ1つで動くStripes Framework(3)

第19回

セッションの利用

 続いて、Stripesからセッションを利用する手法について説明します。ここまでActionBeanを利用してさまざまな値をJSP側に送り出したりしてきましたが、それらは基本的にすべて1回のリクエストで完結するものでした。ActinBeanに保管されるプロパティのスコープは基本的にリクエストであり、値を保持し続けるわけではありません。

 では、ActionBeanではセッションは利用できないのでしょうか。実をいえば、標準では特にそのための機能は用意されていません。Stripesは非常に小さくまとまったフレームワークであり、あまり幅広い機能は用意されていないのです。

 しかし、Stripesの開発者たちにより、機能を追加するプラグインライブラリが用意されており、これを利用することでActionBeanにセッション・スコープの値を保持できるようになります。これは、SourceForge.netのStripes Stuffからダウンロードできます。

 ここで配布されている「stripesstuff-バージョン.jar」というライブラリファイルを、プロジェクトのWEB-INF内にある「lib」フォルダの中にコピーしてください。これでこのプラグイン・ライブラリの機能が利用できるようになります。ここからセッションの機能を利用できるようにするため、web.xmlに追記を行います。既に記述されているStripesの<filter>タグ内に、以下のタグを追記してください。

<init-param>
  <param-name>Extension.Packages</param-name>
  <param-value>org.stripesstuff.plugin.session</param-value>
</init-param>

 これで、次回起動時よりセッションのプラグインが利用可能になります。なお、既にある他の<init-param>は削除しないように注意してください。

メッセージ保管プログラム

 では、簡単なサンプルとして、フォームから送信したメッセージをListですべてセッションに保管するプログラムを作成してみましょう。今回は、ActionBeanクラスから作成します。HeloActionBeanを次のように書き換えてください。

package jp.codezine;

import java.io.*;
import java.util.*;
import org.stripesstuff.plugin.session.Session;
import net.sourceforge.stripes.action.*;

public class HeloActionBean implements ActionBean {
  private ActionBeanContext context;

  @Session
  private String result;
  @Session
  private String input1;
  @Session
  private List<String>messages = new ArrayList<String>();
  
  public List<String> getMessages() {
    return messages;
  }
  public void setMessages(List<String> messages) {
    this.messages = messages;
  }

  public String getResult() { return result; }
  public void setResult(String result) { this.result = result; }
  public String getInput1() { return input1; }
  public void setInput1(String input1) { this.input1 = input1; }

  @Override
  public ActionBeanContext getContext() {
    return this.context;
  }

  @Override
  public void setContext(ActionBeanContext context) {
    this.context = context;
  }
  
  @DefaultHandler
  public Resolution submit() {
    if (messages == null) messages = new ArrayList<String>();
    messages.add(0,this.input1);
    result = "「" + input1 + "」を追加しました。";
    return new RedirectResolution("/helo.jsp");
  }

}

 ここでは、メッセージを保管するためにmessagesというprivateフィールドを用意しています。これは次のように書かれています。

@Session
private String result;
@Session
private String input1;
@Session
private List<String>messages = new ArrayList<String>();

 この@Sessionというアノテーションをつけることで、このフィールドがセッションに保管されるようになります。プラグイン・ライブラリのセッション機能は、ActionBeanをそのままセッションに置くのではなく、このように「指定したフィールドだけがセッションに置かれるようになる」というものなのです。

 後は、セッション利用のための特別な操作などはまったくありません。submitでは、送られてきたテキストをListの冒頭に追加しているだけで、フィールドをセッションから取り出したり保管したりする処理は一切不要です。その他のフィールドと同じように、ただ値を操作しているだけでよいのです。

次のページ
JSPの作成

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

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5261 2010/07/16 14:00

イベント

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

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

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

メールバックナンバー