複数項目を選択する場合の処理
一覧リストの場合、注意しておく必要があるのは、「複数項目が選択可能な場合」の処理です。<h:selectManyListbox>を使うと、複数の項目が選択できますが、その場合、Bean側でgetValueされる値はどうなるのでしょうか。
実は、valueはString配列として値が設定されるようになっているのです。このため、getValueする際にはString配列にキャストして取り出してやる必要があります。実際に簡単な例を挙げておきましょう。
<h:outputText value="これは、JSFによる表示です。" id="text1"
binding="#{page1Bean.text1}" escape="false" />
<h:form>
<h:selectManyListbox id="select1" binding="#{page1Bean.select1}">
<f:selectItem itemLabel="Windows" itemValue="Windows" />
<f:selectItem itemLabel="Linux" itemValue="Linux" />
<f:selectItem itemLabel="Mac OS X" itemValue="Mac OS X" />
</h:selectManyListbox>
<h:commandButton value="送信" action="#{page1Bean.button1_action}" />
</h:form>
ざっとこんなコンポーネントを用意しておきましょう。そして送信先のpage1Bean.button1_actionで、選択されている項目を取り出し表示してみます。
private HtmlOutputText text1;
private HtmlSelectManyListbox select1;
public HtmlOutputText getText1() {
return text1;
}
public void setText1(HtmlOutputText text1) {
this.text1 = text1;
}
public HtmlSelectManyListbox getSelect1() {
return select1;
}
public void setSelect1(HtmlSelectManyListbox select1) {
this.select1 = select1;
}
public String button1_action(){
String[] arr = (String[])select1.getValue();
String res = "";
for(String s : arr){ res += s + ""; }
text1.setValue(res);
return null;
}
複数項目を選択して送信すると、選択した項目をすべて表示する。 |
ここでは、(String[])select1.getValue()というようにしてString配列として値を取り出し、それを繰り返しで順に取り出して変数にまとめています。このように配列を繰り返し処理するのが複数項目を選択するコンポーネントの基本、と考えればよいでしょう。