SHOEISHA iD

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

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

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

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

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

第18回

選択リスト

 続いて、選択リストです。<select>によるリストを出力するためのタグですが、これは通常、<select>タグと<option>タグの組み合わせによって作成されています。Stripesも同様に以下の2つのタグを用意しています。

<stripes:select>
  <stripes:option value="値" label="ラベル" />
  ……必要なだけタグを記述……
</stripes:select>

 外側の<stripes:select>~</stripes:select>の間に、表示する項目を設定する<stripes:option>タグを用意します。これでvalueとlabelをそれぞれ指定することで、表示されるテキストと、選択したときに送られるvalueがそれぞれ設定されます。では、簡単な記述例をあげておきましょう。

<stripes:select name="sel">
  <stripes:option value="1" label="one" />
  <stripes:option value="2" label="two" />
</stripes:select>
リストは、2つのタグの組み合わせで作成される
リストは、2つのタグの組み合わせで作成される

 このようにすることで、2つの項目を持った選択リストが作成できます。ここでは表示される行数を指定していないため、プルダウンメニューのような形で表示されますが、size属性を用意すると一覧リストの形で表示させることも可能です。

SelectOptionクラスの定義

 これで選択リストは作成できますが、<stripes:option>タグを直接記述した場合、固定されたリストしか表示できなくなってしまいます。もっとダイナミックにリストを更新したい、という場合もあるでしょう。

 Stripesには、<stripes:option>のほかに、Javaのオブジェクト(コレクションやEnumなど)として用意された値を元に<option>タグを生成するための機能も用意されています。これを利用し、Java側からリストを制御してみましょう。

 まずは、リストとして表示するためのデータを管理するクラスから作成します。Stripesでは、あらかじめ用意されたオブジェクトをコレクションなどでまとめておき、これをJSP側で<jsp:useBean>を使って利用可能にし、値を取り出して処理していきます。そのために、まずはリスト用のデータを格納するクラスを用意します。

package jp.codezine;

public class SelectOption {
  private String label;
  private String value;
  
  public String getLabel() {
    return this.label;
  }
  public void setLabel(String label) {
    this.label = label;
  }
  public String getValue() {
    return this.value;
  }
  public void setValue(String value) {
    this.value = value;
  }
  
  public SelectOption(String label, String value) {
    super();
    this.label = label;
    this.value = value;
  }
  
}

 ここでは、「SelectOption」というクラスとして作成しました。ここではlabelとvalueというプロパティを用意してあります。これらはいずれもString値で、それぞれ<option>に表示されるテキストとvalue属性に設定される値を示すものです。

SelectOption管理クラスの定義

 続いて、このSelectOptionクラスのオブジェクトをまとめて管理するためのクラスを用意しましょう。ここでは「OptionsModel」というクラスを作成し、そこにListのプロパティを用意してSelectOptionを保管させることにします。

package jp.codezine;

import java.util.*;

public class OptionsModel {
  private List<SelectOption> options = new ArrayList<SelectOption>();

  public OptionsModel(){
    options.add(new SelectOption("おはよう","morning"));
    options.add(new SelectOption("こんにちは","Hello"));
    options.add(new SelectOption("さようなら","Bye"));
    options.add(new SelectOption("おやすみ","night"));
  }

  public List<SelectOption> getOptions() {
    return options;
  }

  public void setOptions(List<SelectOption> options) {
    this.options = options;
  }
}

 ここでは、初期状態で表示する項目をコンストラクタで用意しています。また、List全体を取得するためのgetOptionsプロパティを用意してあります。これで、このOptionsModelをBeanとして用意し、optionsプロパティを取得すれば、表示するためのSelectOptionのコレクションが得られるようになります。

次のページ
JSPの修正

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー