Не удалось экспортировать класс 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>