-
FEATURED COMPONENTS
First time here? Check out the FAQ!
I want to implements: 1, Click one button to do something in server 2, Call JavaScript to do something in Client with the server's data 3, Do something in server with the result of Client. All of these must be synchronous like Messagebox.show, Clients.evalJavaScript can execute JavaScript but it isn't synchronous and cann't get the result.
I implements it as follow(PS: ctx is a vary in session):
public Object evalJavaScriptSynchronized(String script)
{
script = "_data=" + script + "zAu.send(new zk.Event(null,\"onResult\",{result:__data},{toServer:true}));"; // Use zAu.send to return the result.
Clients.evalJavaScript(script);
Clients.showBusy("Wait for JavaScript's result...");
try
{
Executions.wait(ctx.mutex); // Wait for JavaScript executed synchronized.
}
catch(Exception e)
{}
Clients.clearBusy();
return ctx.result; // Return the result.
}
public class ResultAuService
implements AuService
{
@Override
public boolean service(AuRequest request, boolean everError)
{
String command = request.getCommand();
if ("onResult".equals(command))
{
ctx.jsResult = request.getData().get("result");
Executions.notifyAll(ctx.mutex);
return true;
}
return false;
}
}
Asked: 2013-09-29 09:50:18 +0800
Seen: 39 times
Last updated: Dec 13 '13
Facing issue in masking on phone [closed]
coerceFromString_ override no longer works from 6.5.1 [closed]
Execute Javascript on component visible
Is there a way to resolve view model properties as input to client side javascripts?
scrollbar listner for 2 grid [closed]
Theme javascript wpd file not found