从 html 脚本标记调用 GWT Java 函数

2022-09-04 03:25:23

我有一个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脚本进行调用,或者我做错了什么?

谢谢!


答案 1
  1. 您尝试执行的操作不起作用,因为 GWT 编译器会重命名所有标识符名称以最小化生成的代码大小:因此存在,但它称为其他名称。myFunction()

  2. 您正在查看旧版本的文档。在最新版本中,这一切都得到了解释:从手写JavaScript调用Java方法

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

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

然后在应用程序初始化中,您必须调用 。然后在手工制作的javascript中,你可以通过以下方式访问它:EnclosingClass.exportMyFunction()

window.myFunction();

答案 2