2

GWTP を使用して webapp を構築しています。これが私の問題です。私は顧客ページ (CustPresenter) を持っています。そのページにアクセスすると、データベースからデータを呼び出してロードします。

すべてのデータをロードするには時間がかかる場合があるため、現在のブラウザをロックして、データのダウンロードがまだ完了していない間はユーザーが何もクリックできないようにします。

だからここに私が考えていることがあります。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のようなことをしたい。ご覧のとおり、そのリンクを初めて開くと、読み込みパネルがポップアップし、すべての GUI が表示されるまで何もクリックできません。

カスタム 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 呼び出し中に「読み込みインジケーター」を表示する最も簡単な方法は何ですか?

4

1 に答える 1