選択リスト
続いて、選択リストです。<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つの項目を持った選択リストが作成できます。ここでは表示される行数を指定していないため、プルダウンメニューのような形で表示されますが、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のコレクションが得られるようになります。
