簡體   English   中英

Wicket - 在延遲加載期間隱藏AjaxButton上的元素

[英]Wicket - hide element on AjaxButton during lazy loading

我有一個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 "";
        }
    });
}

感謝@Robert Niestroj的答案(但僅在最新的Wicket 6中工作),我找到了Wicket 1.5的解決方案,我希望它能幫助某人。

它只是類似的想法,但通過覆蓋AjaxButton的getAjaxCallDecorator,並使用純Javascript實現

AjaxButton button1 = new AjaxButton("submit1") {
    String id = this.getMarkupId();
    @Override
    protected void onSubmit(AjaxRequestTarget target, Form form) {
        ...
    }

    @Override
    protected org.apache.wicket.ajax.IAjaxCallDecorator getAjaxCallDecorator() {
        return new AjaxCallDecorator() {
            @Override
            public CharSequence decorateScript(Component component, CharSequence script) {
                return "document.getElementById(\'"+id+"\').style.display = 'none';"+script;
            }
        };
    }
};

要記住的重要一點是確保您返回腳本+ [添加的腳本],否則您的onsubmit操作將不會發生。

Wicket 1.5 doc中的更多信息(以及onSucces和onFailure版本)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM