我有一个GWT项目,我想在GWT项目的主html文件中添加一个脚本标记,该文件调用位于我的客户端代码中的Java函数。
根据documentation,我应该添加以下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脚本进行调用,或者我做错了什么?
谢谢!
答案 0 :(得分:13)
您尝试做的事情不起作用,因为GWT编译器重命名所有标识符名称以最小化生成的代码大小:因此myFunction()
存在,但它被称为其他内容。
您正在查看旧版文档。在最新版本中,所有解释都是: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();