Вызов функции GWT Java из тега html script

У меня есть проект GWT, и я хотел бы добавить тег script в главный файл html проекта GWT, который вызывает функцию Java, расположенную в моем клиентском коде.

В соответствии с документацией я должен добавить что-то вроде следующего тега html:

<script type='text/javascript'> 
[email protected]::myFunction();
</script>

где com.myCompany.myProject.client.myClass - это путь к классу, а myFunction - это функция java, которую я бы назвал.

Когда я пытаюсь выполнить следующую реализацию myFunction ничего:

public void myFunction() {
    HTMLPanel panel = new HTMLPanel("I have been called");
    RootPanel.get().add(panel);
}

То есть myFunction не вызывается.

Но когда я делаю тот же вызов из метода JSNI, он работает.

Возможно ли выполнить вызов из html script, или я делаю что-то неправильно?

Спасибо!

Ответы

Ответ 1

  • То, что вы пытаетесь сделать, не работает, потому что компилятор GWT переименовывает все имена идентификаторов, чтобы свести к минимуму размер кода: so myFunction() существует, но он вызвал что-то еще.

  • Вы искали старую версию документации. В последней версии все это объясняется: Вызов метода Java из рукописного JavaScript

Решение - добавьте дополнительный метод где-нибудь:

public static native void exportMyFunction() /*-{
   $wnd.myFunction =
      $entry(@com.myCompany.myProject.client.myClass::myFunction());
}-*/;

то в инициализации вашего приложения вы должны позвонить EnclosingClass.exportMyFunction(). Затем в ручном javascript вы можете получить к нему доступ через:

window.myFunction();