首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与AjaxFallBackButton一起使用时,Wicket FeedbackPanel具有空消息

与AjaxFallBackButton一起使用时,Wicket FeedbackPanel具有空消息
EN

Stack Overflow用户
提问于 2017-01-04 20:23:20
回答 1查看 281关注 0票数 0

我使用AjaxFallbackButton来提交表单,并使用BeanValidation进行表单输入。和用于显示错误的FeedbackPanel。当我输入无效的内容时,表单不会提交,但feedbackpanel也不会显示。

onError,form.getFeedbackMessages()返回空数组。

Wicket版本6.18.0。

代码如下:

代码语言:javascript
复制
    Form<Address> form = getForm();
    add(form);

    FeedbackPanel feedbackPanel = new FeedbackPanel("feedbackMessage");
    feedbackPanel.setOutputMarkupId(true);
    add(feedbackPanel);     


public Form<Address> getForm() {

    CompoundPropertyModel<Address> model = new CompoundPropertyModel<Address>(address);
    final Form<Address> form = new Form<Address>("addressForm", model);

    form.add(new Label("fNameLabel", new ResourceModel("fNameLabel")));
    form.add(new Label("lNameLabel", new ResourceModel("lNameLabel")));
    form.add(new Label("workLabel", new ResourceModel("workLabel")));
    form.add(new Label("homeLabel", new ResourceModel("homeLabel")));

    form.add(new TextField<String>("firstName").add(new PropertyValidator<String>()));
    form.add(new TextField<String>("lastName").add(new PropertyValidator<String>()));
    form.add(new TextField<String>("homeLocation").add(new PropertyValidator<String>()));
    form.add(new TextField<String>("workLocation").add(new PropertyValidator<String>()));
    form.add(new AjaxFallbackButton("submit", form) {

        /**
         * 
         */
        private static final long serialVersionUID = 6672729206839722437L;

        @Override
        protected void onError(final AjaxRequestTarget target, final Form form) {   
            Page page = target.getPage();
            for (Component component : page.visitChildren()) {
                String markupId = component.getMarkupId();
                if (markupId.contains("feedbackMessage")) {
                    if (form.hasFeedbackMessage()) {

                        System.out.println(form.getFeedbackMessages());
                    }
                }
            }

        }

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form form) {

            if (address.getFirstName() != null) {
                AddressGenerator.getInstance().add(address);
                modalWindow.closeCurrent(target);
            }
        }
    });

    return form;
}

表单是ModalWindow格式的。

EN

回答 1

Stack Overflow用户

发布于 2017-01-04 22:12:25

Component#getFeedbackMessages()为此组件实例返回消息only。它不会去探望孩子!

使用以下命令更新您的onError()方法:

代码语言:javascript
复制
    @Override
    protected void onError(final AjaxRequestTarget target, final Form form) {   
        target.add(feedbackPanel);
    }

您可以使用if (form.hasError()),但由于您是在AjaxFallbackButton#onError()中,这意味着存在错误。

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

https://stackoverflow.com/questions/41463756

复制
相关文章

相似问题

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