[英]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.