Wicket 8 リリース以前の古い Wicket からそうであるが、Wicket の DropDownChoice は、
言語ロケールに沿って日本語であれば、「選んでください」が先頭に付いたプルダウンになる。
DropDownChoice 生成時のデフォルト Model Object を null にすれば
WebApplication または、Page クラス別に指定する properties で
null=
と記述した properties を用意すれば、「選んでください」のHTML option valueは、
これは空白になり、
しかし、、
Formコンポーネントの onSubmit で処理された後は、Page更新で
この空候補を選択しなおすことができなくなってしまう。
AJAX の submit ビヘイビアで処理すればそんなことはなく残るのだが、
Formコンポーネントの onSubmit でも、
「選んでください」のHTML option valueを空白文字で選択候補として常に存在させて
再度選択できるようにする方法がある。
DropDownChoice の継承元である
org.apache.wicket.markup.html.form.AbstractSingleSelectChoice
の isNullValid() をオーバーライドとか考えたのだが、
生成した DropDownChoice インスタンスで、setNullValid(true) を実行すれば良い。
ただし、注意が必要なのは、setNullValid(true) を実行することにした場合、
WebApplication または、Page クラス別に指定する properties で
null=
を記述する必要もないことだ。
サンプル、1~3 の Integer値を選択するもの
final DropDownChoice<Integer> idselect = new DropDownChoice<>("idselect", new Model<>() , IntStream.rangeClosed(1, 3).boxed().collect(Collectors.toList()), new IntegerChoiceRenderer()); idselect.setNullValid(true); queue(idselect);
IntegerChoiceRenderer は、Integer値 の IChoiceRenderer実装で、
yipuran-wicketcustom に入っている。