У меня есть форма, где мне нужно динамически добавлять / удалять валидаторы.В зависимости от выпадающего списка другие поля формы могут иметь другие правила проверки.
Для других видов ввода я использовал replace(methodThatCreatesTheInput())
, чтобы избавиться от ранее добавленного валидатора.(Не зная лучшего способа. В частности, кажется, нет никакого способа напрямую удалить валидатор из компонента ...)
С Выбрать , из wicket-extensions, этот подход завершается ошибкой с чем-то вроде:
WicketMessage: submitted http post value [[Ljava.lang.String;@5b4bf56d]
for SelectOption component [8:myForm:targetInput] contains an
illegal relative path element [targetConsortiums:1:option] which does not
point to an SelectOption component. Due to this the Select component cannot
resolve the selected SelectOption component pointed to by the illegal value.
A possible reason is that component hierarchy changed between rendering and
form submission.
Метод, который создает Select:
private FormComponent<?> targetSelection() {
Map<Class<? extends Target>, List<Target>> targets = targetService.getAllAsMap();
SelectOptions<Target> propertyOptions = new SelectOptions<Target>("targetConsortiums",
targets.get(Consortium.class), new TargetRenderer());
SelectOptions<Target> consortiumOptions = new SelectOptions<Target>("targetProperties",
targets.get(Property.class), new TargetRenderer());
Select select = new Select(ID_TARGET, new PropertyModel<Target>(model, "target"));
select.add(propertyOptions);
select.add(consortiumOptions);
select.setRequired(true);
select.setMarkupId(ID_TARGET);
return select;
}
(Почему вместо SelectDownChoice используется Select?хотите, чтобы два типа выборов были четко разделены, , как задокументировано в этом вопросе .)
Есть идеи, как решить эту проблему? Чего я пытаюсь достичьэто, конечно, очень просто.К сожалению, калитка не согласна, или я неправильно ее использую.
Калитка 1.4.