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