java - 使用 GWT JNSI 从 Javascript 调用 Java

标签 java gwt jsni

如何从 Javascript 调用 Java 方法?我尝试了以下方法

http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#calling

但是它不起作用。我无法将 JS 放入 Java 文件中,因为该库使用回调。在我的 App.html 文件中:

    function pickerCallback(data) {
        var doc = data[google.picker.Response.DOCUMENTS][0];
        var name= doc[google.picker.Document.NAME];
        var fileId = data.docs[0].id;

        // set the path text field
        //[instance-expr.]@class-name::field-name
        //[instance-expr.]@class-name::method-name(param-signature)(arguments)
        // Call static method 
        //@com.onix.sdm.client.SDM_Mailer::setSelectedFolder(Ljava/lang/String;Ljava/lang/String;)(name, fileId);
        $entry(@com.onix.sdm.client.SDM_Mailer::setSelectedFolder(name, fileId));
    }

在SDM_Mailer.java中:

private static void setSelectedFolder(String folder, String id) {
    SDM_Mailer myThis = SDM_Mailer.getInstance();
    myThis.textFolder.setText(folder);
    myThis.folderId = id;
}

当我加载应用程序时,在浏览器控制台中出现此错误:

Uncaught SyntaxError: Unexpected token ILLEGAL

在这一行:

      $entry(@com.onix.sdm.client.SDM_Mailer::setSelectedFolder(name, fileId));

我也尝试了之前的那一行(现在已注释),它也给出了相同的错误。

最佳答案

I can't put the JS into Java file because the library uses a callback

这是设计使然 - 此语法的目的不是公开可以由外部 JS 调用的方法,而是让您从 JSNI 内部调用它。这是因为可以修改 JSNI 以实际调用 java 方法。

如果您想在纯 js 中调用 Java/GWT 方法,则必须为此公开它们。您链接http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#calling ,但实际上并没有使用重要的部分:

public static native void exportStaticMethod() /*-{
   $wnd.computeLoanInterest =
      $entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI));
}-*/;

这是重要的部分 - 您必须将函数暴露给外部 JS 可以调用它的地方,但您必须从 JSNI 函数内部进行此暴露。请注意,我们在这里没有调用该函数,只是引用它。

关于java - 使用 GWT JNSI 从 Javascript 调用 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19191062/

相关文章:

java - 读取 .pptx 导致 java.lang.ClassNotFoundException

java - 应为 BEGIN_ARRAY,但在第 1 行第 2 列处为 BEGIN_OBJECT,json语法错误

java - 操作失败 : gradle dependencies CircleCi

java - 如何在 GWT 或 GXT 中使用单个按钮发送同步发布请求?

java - 使 GWT JSNI 代码符合 Checkstyle 的 TrailingComment 指标

java - 使用java流将最后遇到的值放入 map

java - Gwt Request builder - 如何返回响应字符串

gwt - 如何从 GWT 中识别 http 错误代码?

java - GWT JSNI : invoking applet methods?

GWT JSNI 中的 Javascript 条件编译