( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)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の関係を理解してないことがバレバレ。