Wicketで複数選択のチェックボックス
前回の続き
複数のチェックボックスをひとまとめで取得したいっていう話。
メッセージ送信機能で、送信先のユーザーをチェックボックスで指定させたい。モデルはこんな感じ。
public class Message{ private String title; private String text; private List<User> sendTo; .... }
このモデルのsendToにチェックされたユーザーだけを格納するListがセットされてほしい。
で、ページクラスで以下のようにしてみる。
//ページクラスにモデルを設定 this.setDefaultModel(new CompoundPropertyModel<Message>(new Message())); ... //送信対象のユーザーを取得する List<User> users = this.userService.findAll(); //複数選択チェックボックスを作る final CheckBoxMultipleChoice<User> userList = new CheckBoxMultipleChoice<User>("sendTo", users, new ChoiceRenderer<User>("userName","userId"));
ChoiceRenderクラスはDropDownのときにもでてきたけど、要はUserクラスのどのプロパティをlabel、valueに設定するか決めるためのクラス。
この場合は、userNameがlabel、userIdがvalueになるので以下のように出力される。
<input type="check" value="user_id_001" id="user_id_001"/><label for="user_id_001">taka</label>
結局value値でどれがチェックされたかってのをCheckBoxMultipleChoiceクラスの内部で振り分けてるので、valueに出力される値はユニークにならなければいけない。。。なのでIDなどのプロパティを指定する。
submit時に以下のようにすると
form.add(new Button("submit"){ @Override public void onSubmit() { Message message = (Message)this.getPage().getDefaultModelObject(); List<User> sendTo = message.getSendTo(); } });
選択されたユーザーのみが格納されたList
CheckBoxMultipleChoice#setRequired(true)ってすると選択されてない場合エラーになるのかなぁ?帰ったら試してみよう。
その他にもCheckGroupクラスとかもあったけどこっち使った方が楽だったりして。。。試してないけど。。。
以上。