我有一个IFormValidator
,它检查多个FormComponents
的值是否一致。
现在,如果验证失败,我想突出显示所有相关的FormComponents和相应的HTML label
标签,就像Validators一样,它们仅负责单个FormComponent(例如StringValidator
)。
我的第一次尝试是在所有相关的FormComponents上调用FormComponent#invalid()
,但这似乎并不能解决问题,因为它仅调用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>");
}
}
}
);
答案 0 :(得分:0)
仅当FormComponent的#error()
方法被调用时,才被视为无效-参见org.apache.wicket.markup.html.form.FormComponent#isValid()
。
如果只想显示表单的错误反馈消息,则需要实例化您的FeedbackPanel为:
new FencedFeedbackPanel("id", new ComponentFeedbackMessageFilter(form));
这样,它将仅呈现表单的反馈消息。
您可以使用表单组件的反馈消息在相应的HTML表单元素(input
,select
等)旁边显示其特定错误