SHOEISHA iD

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

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

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

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

第17回

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

Beanクラスを作成する

 では、このフォームを管理するBeanクラスを作成しましょう。先ほど、<stripes:form>タグでbeanclass="jp.codezine.HeloActionBean"と指定したので、jp.codezine.HeloActionBeanというクラスとして定義する必要があります。

package jp.codezine;

import java.io.StringReader;
import java.util.List;

import net.sourceforge.stripes.action.*;

public class HeloActionBean implements ActionBean {
  private ActionBeanContext context;
  private String input1;
  private String result;
  
  public String getInput1() {
    return input1;
  }

  public void setInput1(String input1) {
    this.input1 = input1;
  }

  public String getResult() {
    return result;
  }

  public void setResult(String result) {
    this.result = result;
  }

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

  @Override
  public void setContext(ActionBeanContext context) {
    this.context = context;
  }
  
  @DefaultHandler
  public Resolution submit() {
    this.result = "こんにちは、" + this.input1 + "さん!";
    return new ForwardResolution("/helo.jsp");
  }

}
フォームを送信すると、このようにメッセージがResult:部分に表示される
フォームを送信すると、このようにメッセージがResult:部分に表示される

 これで完成です。実際にhelo.jspにアクセスし、フォームを送信してみましょう。Result:部分にメッセージが表示されます。1つのページで、フォームと送信後の表示を兼ねているわけです。

ActionBeanとWebページとの関係

 このBeanクラスのように、JSPのページと連携して働くBeanは「アクションビーン(ActionBean)」と呼ばれます。これは、net.sourceforge.stripes.actionパッケージの「ActionBean」というインターフェースを継承して作成されます。これはActionBeanContextクラスの「context」というプロパティが必須となっているほか、必要に応じてプロパティ(フィールドとアクセサ・メソッド)やメソッドが用意されます。

 ActionBeanでは、用意したBean内の要素と、Webページに用意された要素とが連動して動いています。ではHeloActionBeanクラスに用意されているものがどう機能しているのか見てみましょう。

1)フィールドとページの要素

 HeloActionBeanには、input1とresultという2つのフィールドが用意されています。これらは、いずれもWebページ(helo.jsp)から利用するためのものです。input1は、フォームの<stripes:text name="input1"/>の値が格納されます。Stripesのタグを使って用意されたフォームのコントロール類は、ActionBeanクラスにある同名のフィールドに自動的に値が保管されるのです。

 もう1つのresultは、helo.jsp側では${actionBean.result}として使われています。生成されたActionBeanクラスのインスタンスは、JSP側では「actionBean」という名前で用意されます。このresultプロパティを取得すればよいのです。

2)送信時の処理

 フォームを送信した時の処理は、「submit」というメソッドとして用意しています。これは次のように定義されています。

@DefaultHandler
public Resolution submit() {……略……}

 フォームが送られると、@DefaultHandlerというアノテーションが設定されたメソッドが呼び出されます。アノテーションさえ指定してあれば、メソッド名などは変更してもかまいません。このメソッドでは、「Resolution」というクラスのインスタンスが返値となっています。これは、ActionBeanが呼び出された後に実行されるレスポンスを定義するものです。

 ここでは、まずtext1の値を使って表示するメッセージを作成しresultに設定します。それから、「ForwardResolution」というクラスのインスタンスを作成し、returnしています。このForwardResolutionはResolutionのサブクラスで、引数に指定したアドレスにフォワードするためのものです。これにより、submit処理が終了した後、再びhelo.jspにフォワードされるようになるのです。

 JSPとActionBeanの内容を見れば分かることですが、両者のつながりは、ただJSP側でbeanclassを指定し、ActionBeanのResolutionでJSPにフォワードする、というだけしかありません。フレームワークの多くは、こうしたビューとコントローラーの連携に関し、非常にしっかりとした定義がされているものです。設定ファイルに記述をしたり、あらかじめ決められた命名ルールに従ってクラスやメソッドを作成しますが、Stripesではそうした拘束は何もありません。ただ「ActionBeanインターフェースを実装する」というだけで、実に自由な設計を行うことができます。

次のページ
バリデーションとエラーメッセージ

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング