thanks Danny for the reply i'll try out ur suggestion but had one doubt In my project with my current implementation I always get onFailure for the rpc in FF. However sometimes the corr. server function is executed and sometimes not. I get StatusCodeException in FF with status code as 0. Also it works properly with IE7. In ur suggestion, u stop the timer in both cases i.e. onSuccess and onFailure. So does it mean that even when onFailure is called, the rpc callback has occured and not got cancelled.
On Apr 21, 12:33 am, Danny Goovaerts <[email protected]> wrote: > I faced exactly the same problem > (seehttp://groups.google.com/group/google-web-toolkit/browse_thread/threa... > ) > I concluded that in case of a refresh, the async call is cancelled in > the browser before it has concluded. > I solved the problem by "waiting" until the onSuccess() of the > callback was called. This waitingf is implemented by using a timer > that fires repeatdly until it is stopped in the > onSuccess() method of the RPC callback. > > Here is the main piece of code > > //code called in the ClosingHandler > final AsyncCompletionFlag flag= new AsyncCompletionFlag() ; > SessionGWTInterface.Util.getInstance().transfersSave(xml.toString(), > new AsyncCallback<String>() { > > public void onFailure(Throwable caught) { > flag.setDone() ; > return ; > } > > public void onSuccess(String result) { > flag.setDone() ; > return ; > } > }) ; > //We need to have this to be sure to continue running until the RPC > completes. If not, it can be cancelled before > //it acttually runs > AsyncCompletionChecker checker = new AsyncCompletionChecker(flag) ; > checker.run() ; > > package eu.oobikwe.gwt.rpc; > > import com.google.gwt.user.client.Timer; > > public class AsyncCompletionChecker extends Timer{ > > private static int WAIT_TIME = 10 ; > > private int waitTime ; > private AsyncCompletionFlag flag ; > > public AsyncCompletionChecker(AsyncCompletionFlag flag) { > this(flag,WAIT_TIME) ; > } > > public AsyncCompletionChecker(AsyncCompletionFlag flag,int waitTime) > { > super(); > if(waitTime > 0) { > this.waitTime = waitTime; > } > else { > this.waitTime = WAIT_TIME ; > } > this.flag = flag ; > } > > @Override > public void run() { > if(!flag.isDone()) { > this.schedule(waitTime) ; > } > } > > } > > package eu.oobikwe.gwt.rpc; > > public class AsyncCompletionFlag { > private boolean done ; > > public AsyncCompletionFlag () { > super() ; > done = false ; > } > public boolean isDone () { > return done ; > } > > public void setDone() { > done = true ; > } > > } > > This works for me. > On 20 apr, 09:24, chill_hus <[email protected]> wrote: > > > > > Hi > > I am working on an application which uses GWT 2.0, gwt-comet & GXT > > I have added a close handler (Window.addWindowClosingHandler) to > > detect refresh and closing of browser > > When this handler is called I do a RPC to a servlet. > > This RPC is executed properly if the browser tab is closed. However in > > case of refresh it is inconsistent. Few times RPC is executed while > > some times it doesn't and onFailure (of AsyncCallback) is called and > > StatusCodeException is thrown > > Is there any thing wrong in my implementation. pls help me out with > > this situation. > > Thanks in advance for suggestions > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google Web Toolkit" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/google-web-toolkit?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group > athttp://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
