[英]Error message displayed by FeedbackPanel does not clear on valid input submission in Wicket
我有一个表单,其中它们是下拉列表和复选框。 当我不提供任何输入时,我收到通过反馈面板设置的错误消息,如下代码
private Form<ReportCriteria> createCriteriaPanel(String id, IModel<ReportCriteria> model) {
SelectionForm form = new SelectionForm(id, model);
ReportCriteria criteria = (ReportCriteria) getDefaultModelObject();
.......
FeedbackPanel fb = new FeedbackPanel("feedback");
fb.setOutputMarkupId(true);
form.add(fb);
DropDownChoice<Project> billableProjectsList = new DropDownChoice<>(
"projectsList",
......
new ChoiceRenderer<Project>("fullNameWithCustomer"));
form.add(billableProjectsList);
CheckGroup<Project> unbillablePrjct = .......
form.add(new FormComponentValidator(billableProjectsList, unbillablePrjct));
form.getFeedbackMessages().clear();
}
protected void onSubmit() {
SelectionForm.this.getFeedbackMessages().size());
TimesheetExportCriteriaPanel.this.SelectionForm.findForm("criteriaForm").getFeedbackMessages();
}
所有的 feedbackmessages 值都是空的,并且没有检索任何内容。 当我不提供任何输入时,我正确收到了来自 FormValidator 的错误消息。 当我提供输入并提交时,表单会刷新并加载相同的错误消息。
当我们提供有效输入时,我希望它清除。 在论坛上查看时,我发现 Wicket 6.x 我们需要使用 component.getFeedbackMessages(),但它对我来说是空的。
我是检票口的新手。 请帮助输入。
public class FormComponentValidator extends AbstractFormValidator {
private static final long serialVersionUID = 1L;
private FormComponent<?>[] components;
@SuppressWarnings("unchecked")
public FormComponentValidator(FormComponent<?> selectedBillableProject, FormComponent<?> selectedUnBillableProject) {
components = new FormComponent[]{selectedBillableProject, selectedUnBillableProject};
}
/*
* (non-Javadoc)
* @see org.apache.wicket.markup.html.form.validation.IFormValidator#getDependentFormComponents()
*/
public FormComponent<?>[] getDependentFormComponents() {
return components;
}
/*
* (non-Javadoc)
* @see org.apache.wicket.markup.html.form.validation.IFormValidator#validate(org.apache.wicket.markup.html.form.Form)
*/
public void validate(Form<?> form ) {
if ((org.apache.commons.lang.StringUtils.isEmpty(components[0].getInput()) || components[0].getInput() == null )
&& (org.apache.commons.lang.StringUtils.isEmpty(components[1].getInput()) || components[1].getInput() == null)) {
error(components[0], "project.Required");
}
}
}
私人无效配置反馈(){
// activate feedback panel
final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
feedbackPanel.setOutputMarkupId(true);
feedbackPanel.setVisible(false);
add(feedbackPanel);
// don't show filtered feedback errors in feedback panel
final int[] filteredErrorLevels = new int[] { FeedbackMessage.ERROR };
feedbackPanel.setFilter(new IFeedbackMessageFilter() {
@Override
public boolean accept(FeedbackMessage message) {
for (int errorLevel : filteredErrorLevels) {
if (message.getLevel() == errorLevel) {
return false;
}
}
return true;
}
提交表单检票时,会在所有表单组件(如 TextInput、TextArea、DropDownChoice 等)上运行所有配置的验证器。 如果存在验证错误,则 FeedbackMessage 与其各自的 FormComponent 相关联。
呈现 FeedbackPanel 时,Wicket 会访问所有 FormComponents 并呈现它们的 FeedbackMessages(错误、信息等)。
在请求周期结束时,Wicket 会删除所有呈现的反馈消息。 如果任何 IFeedback 组件(如 FeedbackPanel)都没有呈现 FeedbackMessage,那么它将在下一个请求周期中保留。 这是由DefaultCleanupFeedbackMessageFilter完成的。
在 DefaultCleanupFeedbackMessageFilter#accept() 处设置断点并查看有问题的消息是否被接受。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.