Vaadin:如何从javascript方法中获取返回值?

时间:2014-07-29 08:45:10

标签: vaadin vaadin7

我有一个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方法的返回值?如果是的话,我怎么能搞清楚?

1 个答案:

答案 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')")