У меня есть IFormValidator
, который проверяет, являются ли значения нескольких FormComponents
связными.
Теперь, если проверка не пройдена, я бы хотел выделить все связанные с FormComponents и соответствующиеТеги HTML label
, как это происходит с валидаторами, которые отвечают только за один компонент FormComponent (например, StringValidator
).
Моя первая попытка была вызвать FormComponent#invalid()
для всех связанных компонентов FormComponent, но это непохоже, не сработает, так как он просто вызывает FormComponent#onInvalid()
, который по умолчанию ничего не делает.
Второе, что я пробовал, вызывал FormComponent#error(String)
для каждого компонента, но это, конечно, генерирует дополнительное сообщение об ошибкедля каждого FormComponent, который не является желаемым поведением.Но, по крайней мере, он выделяет отдельные недействительные FormComponents.
Каков будет правильный способ сделать это?Есть ли простой способ, который я пропускаю, так как метод IFormValidator#getDependentFormComponents()
, который я должен реализовать, уже сообщает Validator, какие FormComponents будут недействительными в результате неудачной проверки?
Вотупрощенный пример того, что я пробовал с Wicket 8.3:
wicketForm.add(new IFormValidator() {
@Override
public FormComponent<?>[] getDependentFormComponents() {
return new FormComponent<?>[] {formComponent1, formComponent2, formComponent3};
}
@Override
public void validate(Form<?> form) {
if (/*values of formComponent1-3 are not coherent*/) {
form.error("<error message>");
/* No highlighting at all */
formComponent1.invalid();
formComponent2.invalid();
formComponent3.invalid();
/* Highlighting works, but obviously produces same error message multiple times */
formComponent1.error("<error message>");
formComponent2.error("<error message>");
formComponent3.error("<error message>");
}
}
}
);