从 html 脚本标签调用 GWT Java 函数
Posted
技术标签:
【中文标题】从 html 脚本标签调用 GWT Java 函数【英文标题】:Calling a GWT Java function from an html script tag 【发布时间】:2011-07-24 00:53:12 【问题描述】:我有一个 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 脚本进行调用,还是我做错了什么?
谢谢!
【问题讨论】:
【参考方案1】:您尝试执行的操作不起作用,因为 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();
【讨论】:
我正在尝试解决类似的问题,只是一个问题,如何将 String 传递给 myFunction()?像 myFunction(String s) ? 查看此文档以了解如何为 JSNI 调用添加参数:code.google.com/webtoolkit/doc/latest/… 在这个答案中还有完整的例子:***.com/questions/5234735/… 如果 myFunction() 是实例方法而不是静态方法,这将如何工作? JavaScript 如何知道要调用哪个 myFunction() 实例?它没有。我很想知道这是否解决了问题,因为我有同样的情况,因此它会抛出异常。我不认为您可以从手写 JavaScript 调用非静态 GWT Java 方法,因为在您的应用程序初始化中,当您导出本机函数时,您还没有 EnclosureClass 的实例,并且您有一个鸡和-鸡蛋问题。 @axle123 都在文档中:gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#methods以上是关于从 html 脚本标签调用 GWT Java 函数的主要内容,如果未能解决你的问题,请参考以下文章
GWT ScriptInjector VS 将脚本标签添加到 index.html 页面