2012-01-08 69 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