( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

DropDownChoiceとModelのvalue

DropDownChoiceをつかってハマったこと。
DropDownChoiceにsetChoises(IModel choices)でBeanを設定した場合で、かつvalidatorを設定している状況。

この状態で、FormをsubmitするとFormComponentのvalidate()が実行されるが、そのときvalidatorがチェックする値が、setChoisesで設定したBeanになってしまうのです。
DropDownChoiceにvalidatorを設定する意味ないけど、たとえばPatternValidatorとかを設定していると、PatternValidatorがStringを期待しているのにBeanが渡されて、ClassCastExcepionで死亡。

とりあえず、DropDownChoiseのconvertChoiceIdToChoice(String id)をOverrideして、引数のidをそのまま返すように対応しました。

		final List<?> list = jdbcManager.from( entityClass )
							  .orderBy( idCol )
							  .getResultList();
		
		
		DropDownChoice choice = new DropDownChoice( id ){
			@Override
			protected Object convertChoiceIdToChoice(String id)
			{
				return id;
			}
		};

なんでこんなことになったかというと、S2jdbcで検索したentityをそのまま
DropDownChoiseに設定していたからです。
なんていうか、まだComponentとModelの関係を理解してないことがバレバレ。

ボタンによってFormのValidationを有効・無効にする方法

AjaxButtonなんかで、フォームのデータは送りたいけどvalidationはしたくないって場合があります。
たとえば、Textboxの横に検索ボタンとかをつけて、Ajaxで検索ダイアログを表示するとか。

そんな時は、ButtonクラスのsetDefaultFormProcessing(boolean defaultFormProcessing)をfalseで設定すればよし。
このメソッドは、戻り値として自分自身をthisで返すので、Buttonクラスを継承した無名クラスを生成している場合でも、末尾にこのメソッドを呼び出してあげればOK。

CheckBoxMultipleChoiceの&lt;br/&gt;

最近Wicketで遊んでます。

CheckBoxMultipleChoiceを利用すると、Checkboxを出力した後<br/>が出て縦に並んでいやーんってなる場合があります。
そんな時には、CheckBoxMultipleChoice#setSuffix( String suffix)してあげましょう。

CheckBoxMultipleChoiceでは、onComponentTagBodyメソッドが呼ばれたときに、設定されているsuffixを最後に追加します。で、デフォルトのsuffixが<br/>なので、縦にならぶってわけ。