2012-01-08 67 views
0

如何从JSNI调用外部JS?gwt/jsni-从外部JS传递字符串到Java

例如:

//Some external JS code 
     ... 
     this.onFeatureClick = function(event) { 
     ... 
     var name = "Batman"; 
     passToJava(name); //Invoke java method and pass String name 
     }; 

我试过这个位置:

public void onModuleLoad() { 
    ... 
    nativeVariableName(); //Call native method 
} 

public static void passToJava(String name) { 
    System.out.println(name); 
} 

public native String nativeVariableName() /*-{ 
      $wnd.passToJava = function(name) { 
      @com.google.myproject.webinterface.client.MyWebInterface::passToJava(Ljava/lang/String;)(name); 
      }; }-*/; 

我甚至不知道从JavaScript调用工作。 谢谢。

+0

看一看GWT的文档,第一部分介绍了如何从JavaScript发送一个变量到Java:http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#writing – milan 2012-01-08 21:00:53

+0

公众static void alert(String msg)/ * - { $ wnd.alert(msg); } - * /; – milan 2012-01-08 21:00:59

回答

2

此代码工作得很好。我不知道你期望看到System.out.println的调用结果,但看起来你正在寻找错误的地方。用System.out.println替换Window.alert并亲自查看。如果它不工作,就意味着错误是在其他地方:

  • 检查函数是否正确曝光(在浏览器中, 打开控制台,然后输入window.passToJava,如果显示为空,功能WASN 't 曝光)
  • 检查是否正确调用onFeatureClick。
+0

打印调试消息的另一种方法是使用com.google.gwt.core.client.GWT.log(String)方法。这样,它将在托管模式的控制台实用程序中可见。这样,只有开发者才会看到这样的消息,但即使您稍后忘记删除通话,用户也不会感到烦恼。 – 2012-01-09 06:55:19

+0

谢谢,它有帮助。如果我在外部JS代码中添加一个函数passToJava(){...},则该调用将工作在onclick上。但是,我的gwt代码没有任何反应。 – 2012-01-10 14:44:26