Как удалить валидатор из выбора? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть форма, где мне нужно динамически добавлять / удалять валидаторы.В зависимости от выпадающего списка другие поля формы могут иметь другие правила проверки.

Для других видов ввода я использовал 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.

1 Ответ

0 голосов
/ 03 апреля 2012

Я не знаю, как это сделать в Wicket 1.4, но в Wicket 1.5 есть метод удаления для валидаторов в FormComponent (см. javadoc )

...