我有一个JS方法showMessage(message)
function showMessage(message) {
alert(message);
return "Your message is " + message;
}
我可以从我的组件或UI获取方法的参数
JavaScript.getCurrent().addFunction("showMessage", new JavaScriptFunction() {
@Override
public void call(final JSONArray arguments) throws JSONException {
System.out.println("Getting call JS method " + arguments);
}
});
Page.getCurrent().getJavaScript().execute("showMessage(Hello World !)");
那么,无论如何都要在Vaadin中获取JS方法的返回值?如果是的话,我怎么能搞清楚?
答案 0 :(得分:2)
不,你不能从那里回来
由于客户端和服务器之间通信的异步性质,因此不能将返回值发送回浏览器。 https://vaadin.com/api/7.2.5/com/vaadin/ui/JavaScriptFunction.html#call(org.json.JSONArray)
要获取返回值,您必须从客户端showMessage
(浏览器/ javascript)实际回调服务器(服务器端定义的showMessage
方法)。我认为,你的主要问题是将它们命名为相同(我不确定,如果Vaadin在这里应用了一些基于包名的前缀,但很可能你的一个showMessaage方法会覆盖另一个)。
您应该将您的客户showMessage
重命名为其他内容(下面为requestMessage
)并在其中调用您服务器的showMethod
。
// client/browser/javascript (remove/rename existing showMessage from your _client_ code)
function requestMessage(m) { showMessage("Requested: "+m) }
// server/vaadin/java
Page.current.javaScript.execute("requestMessage('Hello World')")