我有一个带有AjaxLazyLoadPanel的页面,其中包含一个长加载列表并提交AjaxButton。

在AjaxLazyLoadPanel准备好之后,当我提交时,另一个长加载正在执行,此后,我需要刷新整个页面。这是我得到的信息,代码如下所示:

    AjaxButton button1 = new AjaxButton("submit1") {
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form form) {
            someLongWorkingMethod();
            setResponsePage(page); //refreshing page
        }
    };
    add(button1);


而且效果很好。但是我现在想做的是-在计算方法时以及在使用setResponsePage刷新页面时禁用此按钮或隐藏此按钮(或在必要时在整个面板中隐藏),我想让此按钮返回。

我已经阅读了很多关于它的帖子/邮件列表,但是没有任何帮助,我尝试了所有发现的东西并将其放置在someLongWorkingMethod()之前:

ajaxLazyLoadPanel.setOutputMarkupId(true);
ajaxLazyLoadPanel.setOutputMarkupPlaceholderTag(true);
ajaxLazyLoadPanel.add(new AttributeAppender("style","display:none;"));
ajaxLazyLoadPanel.setVisible(false);
ajaxLazyLoadPanel.setEnabled(false);
target.add(ajaxLazyLoadPanel);


而且对于ajaxLazyLoadPanel来说也一样,但是对于“ this”(AjaxButton)来说都是一样的。

我是在做非常错误的事情还是什么?这就是我正在尝试做的可能吗?我真的很感谢您的帮助。

最佳答案

在您的AjaxButton中,您可以覆盖updateAjaxAttributes()并添加一个IAjaxCallListener,在单击按钮后立即通过jQuery隐藏该按钮。呈现responsePage后,按钮将再次出现。覆盖的代码如下所示:

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
    super.updateAjaxAttributes(attributes);
    attributes.getAjaxCallListeners().add(new IAjaxCallListener() {

        @Override
        public CharSequence getBeforeHandler(Component cmpnt) {
            return "$(\"#" + cmpnt.getMarkupId() + "\").hide()";
        }

        @Override
        public CharSequence getPrecondition(Component cmpnt) {
            return "";
        }

        @Override
        public CharSequence getBeforeSendHandler(Component cmpnt) {
            return "";
        }

        @Override
        public CharSequence getAfterHandler(Component cmpnt) {
            return "";
        }

        @Override
        public CharSequence getSuccessHandler(Component cmpnt) {
            return "";
        }

        @Override
        public CharSequence getFailureHandler(Component cmpnt) {
            return "";
        }

        @Override
        public CharSequence getCompleteHandler(Component cmpnt) {
            return "";
        }
    });
}

07-28 02:33
查看更多