Wicket IFormValidator - 将多个 FormComponents 标记为无效
Wicket IFormValidator - Mark multiple FormComponents as invalid
我有一个 IFormValidator
检查多个 FormComponents
的值是否一致。
现在,如果验证失败,我想突出显示 所有 相关的 FormComponents 和各自的 HTML label
标签,就像验证器一样,仅负责单个 FormComponent(例如 StringValidator
)。
我的第一次尝试是在所有相关的 FormComponents 上调用 FormComponent#invalid()
,但这似乎没有用,因为它只是调用 FormComponent#onInvalid()
,默认情况下什么都不做。
我尝试的第二件事是在每个组件上调用 FormComponent#error(String)
,但这当然会为每个 FormComponent 生成一条额外的错误消息,这不是所需的行为。但至少它确实突出显示了个别无效的 FormComponents。
执行此操作的正确方法是什么?有没有一种我忽略的简单方法,因为我应该实现的 IFormValidator#getDependentFormComponents()
方法已经告诉验证器,哪些 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>");
}
}
}
);
FormComponent 只有在其 #error()
方法被调用时才被视为无效 - 参见 org.apache.wicket.markup.html.form.FormComponent#isValid()
.
如果您只想显示表单的错误反馈消息,则需要将您的 FeedbackPanel 实例化为:
new FencedFeedbackPanel("id", new ComponentFeedbackMessageFilter(form));
这样它将只呈现表单的反馈消息。
您可以使用表单组件的反馈消息在相应的 HTML 表单元素(input
、select
等)旁边显示其具体错误
我有一个 IFormValidator
检查多个 FormComponents
的值是否一致。
现在,如果验证失败,我想突出显示 所有 相关的 FormComponents 和各自的 HTML label
标签,就像验证器一样,仅负责单个 FormComponent(例如 StringValidator
)。
我的第一次尝试是在所有相关的 FormComponents 上调用 FormComponent#invalid()
,但这似乎没有用,因为它只是调用 FormComponent#onInvalid()
,默认情况下什么都不做。
我尝试的第二件事是在每个组件上调用 FormComponent#error(String)
,但这当然会为每个 FormComponent 生成一条额外的错误消息,这不是所需的行为。但至少它确实突出显示了个别无效的 FormComponents。
执行此操作的正确方法是什么?有没有一种我忽略的简单方法,因为我应该实现的 IFormValidator#getDependentFormComponents()
方法已经告诉验证器,哪些 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>");
}
}
}
);
FormComponent 只有在其 #error()
方法被调用时才被视为无效 - 参见 org.apache.wicket.markup.html.form.FormComponent#isValid()
.
如果您只想显示表单的错误反馈消息,则需要将您的 FeedbackPanel 实例化为:
new FencedFeedbackPanel("id", new ComponentFeedbackMessageFilter(form));
这样它将只呈现表单的反馈消息。
您可以使用表单组件的反馈消息在相应的 HTML 表单元素(input
、select
等)旁边显示其具体错误