14

GWT プロジェクトがあり、クライアント コードにある Java 関数を呼び出すスクリプト タグを GWT プロジェクトのメイン html ファイルに追加したいと考えています。

ドキュメントによると、次の html タグのようなものを追加する必要があります。

<script type='text/javascript'> 
this.@com.myCompany.myProject.client.myClass::myFunction();
</script>

ここで、com.myCompany.myProject.client.myClassはクラス パスで、myFunctionは呼び出したい Java 関数です。

myFunction の次の実装でこれを試しても何も起こりません:

public void myFunction() {
    HTMLPanel panel = new HTMLPanel("I have been called");
    RootPanel.get().add(panel);
}

つまり、myFunctionは呼び出されていません。

しかし、JSNI メソッドから同じ呼び出しを行うと、機能します。

HTMLスクリプトから呼び出しを行うことはできないのでしょうか、それとも何か間違っていますか?

ありがとう!

4

1 に答える 1

13
  1. GWT コンパイラは生成されるコード サイズを最小化するためにすべての識別子名の名前を変更するため、あなたがしようとしていることはうまくmyFunction()いきません。

  2. 古いバージョンのドキュメントを見ていました。最新バージョンでは、これはすべて説明されています:手書きの JavaScript から Java メソッドを呼び出す

解決策 - どこかに追加のメソッドを追加します。

public static native void exportMyFunction() /*-{
   $wnd.myFunction =
      $entry(@com.myCompany.myProject.client.myClass::myFunction());
}-*/;

次に、アプリの初期化で を呼び出す必要がありますEnclosingClass.exportMyFunction()。次に、手作りの JavaScript で、次の方法でアクセスできます。

window.myFunction();
于 2011-03-27T20:28:01.743 に答える