14

我有一个 GWT 项目,我想在 GWT 项目的主 html 文件中添加一个脚本标记,该文件调用位于我的客户端代码中的 Java 函数。

根据文档,我应该添加类似于以下 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. 您正在查看旧版本的文档。在最新版本中,这一切都得到了解释:Calling a Java Method from Handwritten JavaScript

解决方案 - 在某处添加一个额外的方法:

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 回答