首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FeedbackPanel显示的错误消息未清除Wicket中的有效输入提交

FeedbackPanel显示的错误消息未清除Wicket中的有效输入提交
EN

Stack Overflow用户
提问于 2020-12-05 00:45:14
回答 1查看 274关注 0票数 0

我有一个表单,其中他们是一个下拉列表和复选框。当我没有提供任何输入时,我会收到通过反馈面板设置的错误消息,如下所示

代码语言:javascript
复制
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(),但它对我来说是空的。

我是wicket的新手。请帮助输入。

代码语言:javascript
复制
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");

            }
        }
    }

私有空configureFeedback() {

代码语言:javascript
复制
    // 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;
        }
EN

回答 1

Stack Overflow用户

发布于 2020-12-07 19:15:29

提交表单时,Wicket会在所有FormComponents (如TextInput、TextArea、DropDownChoice等)上运行所有已配置的验证器。如果存在验证错误,则将FeedbackMessage与其各自的FormComponent相关联。

在渲染FeedbackPanel时,Wicket会访问所有的Wicket并渲染它们的FeedbackMessages (错误、信息等)。

在请求周期结束时,Wicket删除所有呈现的 FeedbackMessages。如果FeedbackMessage不是由任何IFeedback组件(如FeedbackPanel)呈现的,那么它将停留在下一个请求周期。这是由DefaultCleanupFeedbackMessageFilter完成的。

在DefaultCleanupFeedbackMessageFilter#accept()上设置一个断点,看看有问题的消息是否被接受。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65147420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档