Вызов функции 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();