Wicket DropDownChoice の「選んでください」を常に空白にする

Wicket 8 リリース以前の古い Wicket からそうであるが、Wicket の DropDownChoice は、
言語ロケールに沿って日本語であれば、「選んでください」が先頭に付いたプルダウンになる。
f:id:posturan:20180629162132j:plain
DropDownChoice 生成時のデフォルト Model Object を null にすれば
WebApplication または、Page クラス別に指定する properties で

null=

と記述した properties を用意すれば、「選んでください」のHTML option valueは、
これは空白になり、
f:id:posturan:20180629162326j:plain
しかし、、
Formコンポーネントの onSubmit で処理された後は、Page更新で
この空候補を選択しなおすことができなくなってしまう。

f:id:posturan:20180629162544j:plain
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 に入っている。
f:id:posturan:20180629162624j:plain