如何从Javascript调用GWT java函数?
是否可以从Javascript调用Java(GWT)方法? 从文档中还不清楚。 此处的所有示例http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html演示了如何从JSNI(非JS)函数调用java函数。
更新1
这是一个Java代码:
public class Test_GoogleWeb_JSNI_02 implements EntryPoint { /** * This is the entry point method. */ public void onModuleLoad() { } public static void Callee() { Window.alert("Callee"); } }
这是html中的调用者按钮示例:
这里有一些我尝试过但没有用过的function:
function Test01() { @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); } function Test02() { com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); }
更新2
以下工作。
Java准备:
public void onModuleLoad() { Prepare(); } public static native void Prepare() /*-{ $doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee(); }-*/; public static void Callee() { Window.alert("Callee"); }
呼叫者:
function Test03() { document.calleeRunner(); }
有没有更好的办法?
你的例子不会起作用,因为你试图在一些外部脚本中使用JSNI。 如果你想从外部 JS调用一些东西,你需要使用这个问题中描述的方法或使用GWT导出器
更新:
公开GWT的最安全的方法是将调用包装在其他函数中。 例如:
public native void expose()/*-{ $wnd.exposedMethod = function(param){ @com.my.MyClass::myFunction(*)(param); } }-*/;
否则你可能会在生产模式中遇到一些奇怪的错误=)