2018年以降の記事はGitHub Pagesに移行しました

CheckBoxMultipleChoiceとChoiceRendererを使用したチェックボックスの比較

 早速あげあげ。基本はいただいたコメントのソースのまま、項目のBeanなんかは自分が作っていたもの+Wicket1.3仕様にあわせて……。

	private List<SampleObjectModelBean> selected;
	public SampleChoiceRenderer() {
//		自分が取得している項目
		selected = new ArrayList<SampleObjectModelBean>();
		selected.add(GenerateBeanUtility.GenerateSampleObjectModelBean(2));
		selected.add(GenerateBeanUtility.GenerateSampleObjectModelBean(5));
		
		Form form = new Form("form");
		add(form);
		
//		選択項目全て
		final List<SampleObjectModelBean> all = GenerateBeanUtility.GenerateSampleObjectModelBean();
//		チェックボックス
		final CheckBoxMultipleChoice multiChoice = 
			new CheckBoxMultipleChoice("list", 
						new PropertyModel(this, "selected"), 
						all, 
						new ChoiceRenderer("name", "outline"));
//		表示用ラベル
		final Label label = new Label("label", "最初");
		
		form.add(multiChoice);
		form.add(new Button("next") {
			private static final long serialVersionUID = -1359417135623629179L;
//		選択したものを連結してLabelにセット
			@Override
			public void onSubmit() {
				List<SampleObjectModelBean> list = 
					(List<SampleObjectModelBean>)multiChoice.getModelObject();
				String value = "";
				for (SampleObjectModelBean bean : list) {
					value += bean.getOutline() + ", ";
				}
				label.setModelObject(value);
			}
		});
		this.add(label);
    }

 こんな感じにさせてもらいました。ちょっと前回のCheckGroupとCheckのゴリ押しより長く見えるけど、チェック以外のコンポーネントも入っているからで、肝は、

//		チェックボックス
		final CheckBoxMultipleChoice multiChoice = 
			new CheckBoxMultipleChoice("list", 
						new PropertyModel(this, "selected"), 
						all, 
						new ChoiceRenderer("name", "outline"));

 ここだけ。あと、

		selected.add(GenerateBeanUtility.GenerateSampleObjectModelBean(2));
		selected.add(GenerateBeanUtility.GenerateSampleObjectModelBean(5));

 ここで、みかんとなしをユーザが取得しているものにaddしています。そして、

		final List<SampleObjectModelBean> all = GenerateBeanUtility.GenerateSampleObjectModelBean();

 こっちで項目全てを取得しています。で、htmlはこう。

	<h1>ChoiceRendererを使用したチェックボックス</h1>
	<p>by id:hayasshさん</p>
	<form wicket:id="form">
		<input type="submit" wicket:id="next" />
		<table cellspacing="0" cellpadding="2" border="1">
			<tr>
				<th>なんとか一覧</th>
			</tr>
			<tr>
				<td><span wicket:id="list" /></td>
			</tr>
		</table>
	</form>
	<p wicket:id="label" />

 すると、何とチェックが! →http://samplewicket.kkataka.staxapps.net/?wicket:bookmarkablePage=:sampleWicket.view.choiceRenderer.SampleChoiceRenderer

 ソースコードも減るし、いい事ずくめでしたとさ。わーい。