ListMultipleChoice は複数選択可能な <select> のコンポーネントです。
同じく <select> を扱う ListChoice, DropDownChoice と基本的な扱い方は似ています。
final List choiceData1 = Arrays.asList(new String[]{"data1", "data2", "data3"});
ListMultipleChoice choice1 = new ListMultipleChoice("choice1", choiceData1);
form.add(choice1);
上のコードを見てもらえばわかる様に、初期化の手順に関しては DropDownChoice, ListChoice の時と変わりません。
<select> のラベルとして表示するデータを List でコンストラクタに渡してやります。
いつもの様に Model は Form に CompoundPropertyModel をセットしていると思ってください。
ただ、最初に言ったように ListMultipleChoice は複数選択可能な <select> を扱います。
そのため、ListChoice などとは違って Web ページで入力された結果は List で受け取ります。
List の中身は初期化の時に ListMultipleChoice に渡したリストデータの中身の内、画面で選択されたものです。
Java コードの他の部分に関しては DropDownChoice, ListCohice と大体同じです。
次はレイアウトを記述した HTML での記述。
これは他の Choice コンポーネントと同じで、<select> タグで wikcet:id を指定するだけです。
<select wicket:id="choice1"></select>
実行時にはここにデータが挿入されてリストが作られます。
今回作ったサンプルコードの一覧。
ということでまずは SampleApp.java。
いつも通りのお決まりパターンです。
package javademo.wicket;
import wicket.protocol.http.WebApplication;
public class SampleApp extends WebApplication {
public SampleApp(){
getPages().setHomePage(ListMultipleChoiceSample.class);
}
}
次、ListMultipleChoiceSample.java。
画面の作りは、リストボックス 2 つにボタンを持ったフォームとメッセージ表示のための領域があるだけのものです。
ポイントは入力されたデータを格納する Input クラスのプロパティが List なところ。
package javademo.wicket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import wicket.markup.html.WebPage;
import wicket.markup.html.form.ChoiceRenderer;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.ListMultipleChoice;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.model.CompoundPropertyModel;
public class ListMultipleChoiceSample extends WebPage{
public ListMultipleChoiceSample(){
final Input input = new Input();
setModel(new CompoundPropertyModel(input));
FeedbackPanel feedback = new FeedbackPanel("feedback");
add(feedback);
Form form = new Form("form", feedback){
public void onSubmit(){
info(input.toString());
}
};
add(form);
final List choiceData1 = Arrays.asList(new String[]{"data1", "data2", "data3"});
ListMultipleChoice choice1 = new ListMultipleChoice("choice1", choiceData1);
form.add(choice1);
ArrayList userList = new ArrayList();
userList.add(new User("01", "user1"));
userList.add(new User("02", "user2"));
userList.add(new User("03", "user3"));
//ChoiceRenderer renderer = new ChoiceRenderer("name", "id");
ChoiceRenderer renderer = new ChoiceRenderer("name");
ListMultipleChoice choice2 = new ListMultipleChoice("choice2", userList, renderer);
form.add(choice2);
}
public class Input{
public List choice1 = new ArrayList();
public List choice2 = new ArrayList();
public String toString(){
return "choice1=" + listToStr(choice1) + " ,choice2=" + listToStr(choice2);
}
private String listToStr(List list){
StringBuffer buf = new StringBuffer();
for(int i=0; i<list.size(); i++){
buf.append(list.get(i).toString() + ",");
}
return buf.toString();
}
}
public class User{
public String id;
public String name;
public User(String id, String name){
this.id = id;
this.name = name;
}
public String toString(){
return "user[id=" + id + ", name=" + name + "]";
}
}
}
画面レイアウトを記述した ListChoiceSample.html。
<?xml version="1.0" encoding="Shift_JIS"?> <html> <body> <form wicket:id="form"> choice1:<br> <select wicket:id="choice1"></select><br> choice2:<br> <select wicket:id="choice2"></select><br> <input type="submit"> </form> <span wicket:id="feedback">feedbackmessages will be put here</span> </body> </html>
最後は web.xml。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Wicket Examples</display-name>
<servlet>
<servlet-name>SampleApp</servlet-name>
<servlet-class>wicket.protocol.http.WicketServlet</servlet-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>javademo.wicket.SampleApp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SampleApp</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
</web-app>
ListMultipleChoice を使う上でのポイント。