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