Вызов функции GWT Java из тега html-скрипта - PullRequest
14 голосов
/ 27 марта 2011

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

Согласно документации Я должен добавить что-то вроде следующего HTML-тега:

<script type='text/javascript'> 
this.@com.myCompany.myProject.client.myClass::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, или я что-то не так делаю?

Спасибо!

1 Ответ

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

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

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

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

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

window.myFunction();
...