无法通过GWT中的JsInterop将Java类导出到JavaScript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过GWT中的JsInterop将Java类导出到JavaScript相关的知识,希望对你有一定的参考价值。

我正在关注GWT文档Coding Basics - JavaScript: JsInterop,通过注释@JsMethod将Java类导出到javascript。但是,Java类不会转换为JavaScript。

这是我的Java类:

package io.mincongh.client;

import jsinterop.annotations.JsMethod;

public class ExportedMethods {

  @JsMethod
  public static String sayHello(String name) {
    return "Hello, " + name;
  }
}

我的项目是通过GWT Maven插件2.8.2在Maven中构建的:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>gwt-maven-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>compile</goal>
        <goal>test</goal>
        <goal>generateAsync</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <runTarget>StockMarket.html</runTarget>
    <modules>
      <module>io.mincongh.StockMarket</module>
    </modules>
  </configuration>
</plugin>

当我在浏览器的控制台中调用导出的方法时。然后没有定义方法:

io.mincongh.client.ExportedMethods.sayHello('world');

VM59:1未捕获的ReferenceError:io未定义为:1:1

答案

从规范JsInterop v1.0: Nextgen GWT/JavaScript Interoperability,段落@JsType:

请注意,将Java对象导出到要由其命名空间访问的JavaScript(例如,此示例)需要--generateJsInteropExports标志。

所以你需要在Maven GWT插件中指定这个标志:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>gwt-maven-plugin</artifactId>
  ...
  <configuration>
    <generateJsInteropExports>true</generateJsInteropExports>
  </configuration>
</plugin>

以上是关于无法通过GWT中的JsInterop将Java类导出到JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

GWT和JSInterop命名空间

GWT FileUpload OnClick

GWT JsType数组转换

无法将 GWT 与 Spring RestTemplate 实现集成

GWT 中的 PropertyChangeSupport

GWT与Google App Engine-上传文件