24 Mart 2011 Perşembe

How to display a progressbar during gwt rpc?..


Well, it is a generic non-functional requirement, I have done some research on this item, I have implemented a solution that Thomas Broyer has suggested on gwt group.. This solution has distinct advantage over other solutions, You dont have to change your callback classes, what you have to do is just add a line of code after creation of async gwt-rpc service...

  

    IGwtPersistenceEngineRPCAsync persistenceEngine = GWT.create(IGwtPersistenceEngineRPC.class);
         ((ServiceDefTarget) persistenceEngine).setRpcRequestBuilder(
                          new ProgressRequestBuilder());


    package com.gurselkoca.gwt.client.service;
    import com.allen_sauer.gwt.log.client.Log;
    import com.google.gwt.http.client.Request;
    import com.google.gwt.http.client.RequestBuilder;
    import com.google.gwt.http.client.RequestCallback;
    import com.google.gwt.http.client.Response;
    import com.google.gwt.user.client.rpc.RpcRequestBuilder;
    
    public class ProgressRequestBuilder extends RpcRequestBuilder {
    
     private class RequestCallbackWrapper implements RequestCallback {
    
     private RequestCallback callback;
    
     RequestCallbackWrapper(RequestCallback aCallback) {
     this.callback = aCallback;
     }
    
     @Override
     public void onResponseReceived(Request request, Response response) {
     Log.debug("onResposenReceived is called");
     // put the code to hide your progress bar
     callback.onResponseReceived(request, response);
    
     }
    
     @Override
     public void onError(Request request, Throwable exception) {
     Log.error("onError is called",new Exception(exception));
     // put the code to hide your progress bar
     callback.onError(request, exception);
     }
     }
    
     @Override  
     protected RequestBuilder doCreate(String serviceEntryPoint) {
    
     RequestBuilder rb = super.doCreate(serviceEntryPoint);
     // put the code to show your progress bar
     return rb;  
     }
    
     @Override
     protected void doFinish(RequestBuilder rb) {
     super.doFinish(rb);
     rb.setCallback(new RequestCallbackWrapper(rb.getCallback()));
      
     }
    
    }

Hiç yorum yok:

Yorum Gönder