Tapestyにて、コンボボックス(ドロップダウンリスト)を表示するには、
大きく分けて2通りのやり方があります。
後、自前でコンポーネントを作成してレンダリングというのもありますが
それは置いといて。
今回、Selectコンポーネントを使用してみます。
Selectコンポーネントだけでは、コンボはできますが、中身のレンダリングは
できません。内側でOptionコンポーネントを使用します。
Optionコンポーネントは選択されているかどうかのboolean値を持ちます。
処理的には、Optionを表すコレクションを作成し、Selectコンポーネントの
内側でForを使用してループしながらOptionをレンダリングします。
以下サンプルです。
[HTMLテンプレート]
<!-- Selectコンポーネントを使用する. (Select, Optionコンポーネントを使用。) --> <br/> <hr/> <div id="select_component_001" align="center"> <b> Selectコンポーネントを使用<br/> <br/> Select, Optionコンポーネントを使用。<br/> <br/> </b> <br/> 出力: <br/> <form jwcid="selectSample001@Form" listener="listener:selectSample001FormSubmit"> <select jwcid="select001@Select" multiple="ognl:false"> <span jwcid="@For" source="ognl:select001ValueList" value="ognl:currentSelect001Value" index="ognl:currentSelect001Index"> <option jwcid="@Option" selected="ognl:select001OptionValueList[currentSelect001Index]" label="ognl:currentSelect001Value"></option> </span> </select> <input type="submit" value="実行"/> </form> <br/> <br/> </div> <hr/> <br/>
[javaファイル]
// // 必要なゲッターとセッターの定義 // public abstract List<String> getSelect001ValueList(); public abstract void setSelect001ValueList(List<String> values); public abstract String getCurrentSelect001Value(); public abstract void setCurrentSelect001Value(String value); public abstract int getCurrentSelect001Index(); public abstract void setCurrentSelect001Index(int index); public abstract boolean getSelect001OptionValueList(); public abstract void setSelect001OptionValueList(boolean selectionList); // // 初期化部分 // public void pageBeginRender(PageEvent event){ List<String> select001Values = new ArrayList<String>(); select001Values.add(""); for(int i = 0; i < 5; i++){ select001Values.add(String.format("select_value_%d", i)); } this.setSelect001ValueList(select001Values); this.setSelect001OptionValueList(new boolean[this.getSelect001ValueList().size()]); } // // FORMがサブミットされた際のリスナ // public void selectSample001FormSubmit(IRequestCycle cycle){ System.out.println(Arrays.toString(this.getSelect001OptionValueList())); }
リストと同じサイズのboolean配列を持っているところがポイントです。
画面にて、コンボの項目が選択され、ボタンが押下されると該当するboolean配列の
要素がtrueになっていることが確認できます。
結構、ゴリゴリ感がありますね。
実際は、Select,Optionコンビを使用するよりも、PropertySelectionを使用するほうが
多くなると思います。次は、PropertySelectionを使用してみます.