如何从Javascript调用GWT java函数?

Dim*_*ims 9 javascript java gwt jsni

是否可以从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");
}
}
Run Code Online (Sandbox Code Playgroud)

这是html中的调用者按钮示例:

<input type='button' value='Call' onclick='Test02()'>
Run Code Online (Sandbox Code Playgroud)

这里有一些我尝试过但没有用过的功能:

<script type="text/javascript">

    function Test01() {
        @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
    }

    function Test02() {
        com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
    }


</script>
Run Code Online (Sandbox Code Playgroud)

更新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");
}
Run Code Online (Sandbox Code Playgroud)

呼叫者:

function Test03() {
        document.calleeRunner();
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

jus*_*sio 12

你的例子不会起作用,因为你试图在一些外部脚本中使用JSNI.如果你想从外部 JS 调用一些东西,你需要使用这个问题中描述的方法或使用GWT导出器

更新:

公开GWT的最安全的方法是将调用包装在其他一些函数中.例如:

    public native void expose()/*-{
    $wnd.exposedMethod = function(param){
         @com.my.MyClass::myFunction(*)(param);
    }
}-*/;
Run Code Online (Sandbox Code Playgroud)

否则你可能会在生产模式中遇到一些奇怪的错误=)