我正在使用GWTP來構建我的web應用程序。這是我的問題。我有一個客戶頁面(CustPresenter)。當訪問該頁面時,它將調用&從數據庫加載數據。在GWTP的RPC調用期間顯示「加載指示符」的最簡單方法是什麼?
這可能需要一段時間來加載所有的數據,所以我想我目前的瀏覽器鎖定,使用戶無法點擊任何東西,同時數據還沒有完成下載呢。
所以這就是我的想法。我想在我撥打&呼叫完成時隱藏它的RPC呼叫之前顯示一個DialogBox。看看下面的代碼:
public class CustPresenter extends
Presenter<CustPresenter.MyView, CustPresenter.MyProxy> {
private DialogBox loadingDialogBox=new DialogBox();
@Inject DispatchAsync dispatchAsync;
@Override
public void prepareFromRequest(PlaceRequest request){
super.prepareFromRequest(request);
loadingDialogBox.show();
GetData getDataAction=new GetData();
dispatchAsync.execute(getDataAction, getDataCallback);
}
private AsyncCallback<GetDataResult> getDataCallback=new AsyncCallback<GetDataResult>(){
@Override
public void onFailure(Throwable caught) {
loadingDialogBox.hide();
}
@Override
public void onSuccess(GetVerbFromTripleResult result) {
//show data here (it may take long time)
loadingDialogBox.hide();
}
};
}
然而,乳寧時,該對話框只顯示了1秒&然後消失。然後,所有的UiBinder Guis顯示在客戶頁面上,用戶可以點擊頁面上的任何按鈕,而數據還沒有完成下載。這不是一個正確的行爲。我想做這樣的事情http://sqlfiddle.com/#!2/a2581/1。正如你可以看到,當你第一次打開該鏈接時,加載面板彈出&你不能點擊任何東西,直到所有的guis出現。
我也試圖做一個自定義的AsyncCallback,但沒有發生
public abstract class AsyncCall<T> implements AsyncCallback<T> {
PopupPanel myp=new PopupPanel();
/** Call the service method using cb as the callback. */
public AsyncCall()
{
myp.setTitle("loading");
myp.show();
}
public final void onFailure(Throwable caught)
{
myp.hide();
onCustomFailure(caught);
}
public final void onSuccess(T result)
{
myp.hide();
onCustomSuccess(result);
}
/** the failure method needed to be overwritte */
protected abstract void onCustomFailure(Throwable caught);
/** overwritte to do something with result */
protected abstract void onCustomSuccess(T result);
}
那麼,爲什麼我有這個問題?
如何解決?
或者一般來說,在GWTP中的RPC調用期間顯示「加載指示符」的最簡單方法是什麼?