Friday, 15 January 2010

java - One async call instead of two GWT -



java - One async call instead of two GWT -

i have text area , button. when set text in text area (on paste browse event, other events ignored) or click button same phone call sent server via value alter handler text area , click handler button. if info wrong, server throws exception , returns client message box.

so when set info text area , click button, 2 message boxes appear. there way create 1 message box appear such case?

some code illustration of issue:

textarea.addvaluechangehandler(new valuechangehandler<string>() { @override public void onvaluechange(valuechangeevent<string> event) { firehandlers(); } }); button.addclickhandler(new clickhandler() { @override public void onclick(clickevent event) { firehandlers(); } }); //............ private void firehandlers() { (myprocesshandler handler : myhandlerslist) { handler.handle(); } } //............ public static interface myprocesshandler { public void handle(); } //............ addmyprocesshandler(new myprocesshandler() { @override public void handle() { asynccallback<string[]> ac = new asynccallbackadapter<string[]>() { public void onsuccess(string[] data) { //post processing } @override public void onfailure(throwable throwable) { super.onfailure(throwable); } }; remotecall.getmyservice().getresultfromdata(textarea.getdata(), ac); } });

i think alexey says this:

private boolean eventfired = false; textarea.addvaluechangehandler(new valuechangehandler<string>() { @override public void onvaluechange(valuechangeevent<string> event) { firehandlers(); } }); button.addclickhandler(new clickhandler() { @override public void onclick(clickevent event) { firehandlers(); } }); //............ private void firehandlers() { if(!eventfired) { eventfired = true; (myprocesshandler handler : myhandlerslist) { handler.handle(); } } } //............ public static interface myprocesshandler { public void handle(); } //............ addmyprocesshandler(new myprocesshandler() { @override public void handle() { asynccallback<string[]> ac = new asynccallbackadapter<string[]>() { public void onsuccess(string[] data) { eventfired = false; //post processing } @override public void onfailure(throwable throwable) { super.onfailure(throwable); eventfired = false; } }; remotecall.getmyservice().getresultfromdata(textarea.getdata(), ac); } });

make decision set eventfired=false in code. maybe after processing reply server, maybe after starting async phone call enable actions while waiting server.

java gwt event-handling

No comments:

Post a Comment