いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

[java][tapestry] Tapestry奮闘記-0013 (Checkboxのグループ化)

今回は、チェックボックスのグループ化に
Tapestryに付属しているContributeコンポーネントライブラリを使用します。

チェックボックスのグループ化に使用するコンポーネントは、

  • contrib:CheckboxGroup
  • contrib:ControlCheckbox
  • contrib:ControlledCheckbox

です。

また、このサンプルを動かすには、Contributeライブラリをアプリケーション仕様ファイルに
定義しておく必要があります。アプリケーション仕様ファイルへの定義の仕方は、
http://d.hatena.ne.jp/gsf_zero1/20060706/1152162997
に書いてありますのでそちらを参考にしてください。

なお、今回ページコンポーネントクラスおよびページ仕様ファイルは使用せずに
サンプルを記述してあります。

[HTMLテンプレート]

                    <!--
                    
                        チェックボックスをグループ化する。
                        これらのコンポーネントはFormコンポーネント内で使用されなければならない。
                        (contrib:CheckboxGroup, contrib:ControlCheckbox, contrib:ControlledCheckboxを使用)

                        contrib:CheckboxGroup
                            タグの内側で出現するControlledCheckboxのグループ化を行う。
                            特に指定しなければいけない属性は無し。

                        contrib:ControlCheckbox
                            グループ化されたチェックボックス達をコントロールするチェックボックスコンポーネント
                            このコンポーネントをcontrib:CheckboxGroupの内側に配置すると、このチェックボックスを
                            チェックしたりすることで、グループ化されているcontrib:ControlledCheckboxに対して
                            一括してチェックしたり、チェックを外したりできるようになる。
                            属性として、group属性が定義されているが、指定しない場合は、このコンポーネントが配置されて
                            いるcontrib:CheckboxGroupが自動的にセットされる。

                        contrib:ControlledCheckbox
                            グループ化されたチェックボックス。
                            contrib:CheckboxGroupの内側に配置されることでグループ化される。また、contrib:ControlCheckbox
                            によって、一括制御される対象となるコンポーネント。
                            属性は、通常のCheckboxと同じく、value属性とdisable属性が存在する。また、contrib:ControlCheckbox
                            と同じくgroup属性も定義されているが、こちらも同じく指定しない場合は、このコンポーネントが
                            配置されているcontrib:CheckboxGroupが自動的にセットされる。


                        (注意)
                            上記のコンポーネントは、Tapestryの通常のコンポーネントではないため、予めライブラリをアプリケーション仕様
                            ファイルに定義しておくこと。また、Tapestry Contribute Libraryをクラスパスに通しておくこと。

                                例:<library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/>

                    -->
                    <br/>
                    <hr/>
                    <form jwcid="checkboxGroupForm001@Form" name="checkboxGroupForm001" method="post" action="">
                        <div id="checkboxGroup_001" align="center">
                            <b>contrib:CheckboxGroup, contrib:ControlCheckbox, contrib:ControlledCheckboxコンポーネントを使用</b>
                            <br/>
                            出力: <br/>
                            <span jwcid="checkboxGroup@contrib:CheckboxGroup">
                                <br/>
                                <br/>
                                <input jwcid="controlCheckbox@contrib:ControlCheckbox" type="checkbox" name="checkbox000" value="ognl:false"/>
                                全てチェックON/OFF <br/>
                                <br/>
                                <br/>
                                <input jwcid="controlledCheckbox001@contrib:ControlledCheckbox" type="checkbox" name="check001" value="ognl:false"/>
                                チェックボックス001<br/>
                                <input jwcid="controlledCheckbox002@contrib:ControlledCheckbox" type="checkbox" name="check002" value="ognl:false"/>
                                チェックボックス002<br/>
                                <input jwcid="controlledCheckbox003@contrib:ControlledCheckbox" type="checkbox" name="check003" value="ognl:false"/>
                                チェックボックス003<br/>
                            </span>
                            <br/>
                        </div>
                    </form>
                    <hr/>
                    <br/>

主に、テーブルを使用した一覧画面にて使用されることが多いのではないでしょうか。
コンポーネントとしては、追加ライブラリに存在していますが、よく使われるコンポーネントと思います。
追加ライブラリには、他にもHTMLテーブル自体の生成を担当するTableコンポーネントなどがあります。
まだ試していませんがこちらは結構難しそうです・・・。ページング機能とかあって便利そうなんですが。