Не удалось экспортировать класс Java в JavaScript через JsInterop в GWT

Я следую документации GWT Основы кодирования - JavaScript: JsInterop для экспорта Java-класса в JavaScript с помощью аннотации @JsMethod, Однако класс Java не переносится в JavaScript.

Вот мой класс Java:

package io.mincongh.client;

import jsinterop.annotations.JsMethod;

public class ExportedMethods {

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

И мой проект построен в Maven через плагин GWT Maven 2.8.2:

<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 Uncaught ReferenceError: io не определено в:1:1

1 ответ

Решение

Из спецификации JsInterop v1.0: Совместимость с GWT/JavaScript Nextgen, параграф @JsType:

Обратите внимание, что экспорт объектов Java в JavaScript для доступа к их пространству имен (например, в этом примере) требует --generateJsInteropExports флаг.

Поэтому вам нужно указать этот флаг в плагине Maven GWT:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>gwt-maven-plugin</artifactId>
  ...
  <configuration>
    <generateJsInteropExports>true</generateJsInteropExports>
  </configuration>
</plugin>
Другие вопросы по тегам