В настоящее время я работаю над проектом GWT и теперь его нужно использовать внешним файлом JavaScript. Сейчас я создаю тестовый прототип, чтобы обе стороны работали правильно.Использование GWT JSNI для интеграции с js-файлами
Когда я запускаю и компилирую, я вижу консольные журналы в браузере из вызываемых событий. Однако методы Java GWT не вызываются.
После многих сценариев я также заметил, что если я удалю обертку $entry
с exportStaticMethods()
, произойдет обратное. Я вижу, что в моем java-коде вызывается System.out
s, однако консольные журналы из JavaScript в браузере не вызываются.
Я пытаюсь понять, что вызывает поведение, и если есть небольшая недостающая часть, которую я забыл.
Я уже рассмотрел документацию GWT JSNI для calling a Java method from js и попытался найти решение других вопросов по StackOverflow.
GWT и Java на стороне
Я пошел в onModuleLoad()
метод моего EntryPoint
класса и добавил статический метод exportStaticMethods()
. Я также создал файл PokePingClass.java
, указанный ниже.
EntryPointClass.java
public class EntryPointClass implements EntryPoint {
@Override public void onModuleLoad() {
exportStaticMethods();
// load application here.
}
public static native void exportStaticMethods() /*-{
$wnd.pingApp = $entry((function) {
@com.application.PokePingClass::pingApp()();
});
$wnd.pokeApp = $entry((function) {
@com.application.PokePingClass::pokeApp()();
});
}-*/
}
PokePingClass.java
public class PokePingClass {
public static void pokeApp() {
System.out.println("pokeApp() called");
}
public static void pingApp() {
System.out.println("pingApp() called");
}
}
HTML и JS
В .html
файл проекта, я добавил скрытый div
элемент с идентификатором ' pokePing ', а также файл pokeping.js
.
<html>
<head>
.
. <!-- other stuff -->
.
<script type='text/javascript' src='pokeping.js</script>
</head>
<body>
.
. <!-- other stuff -->
.
<div id="pokePing" style="visibility: hidden;"></div>
</body>
</html>
pokeping.js
$(document).ready(function) {
var $pp = $('#pokePing');
var pokeApp = function() {
console.log("app handling poke event");
window.parent.pokeApp();
}
var pingApp = function() {
console.log("app handling ping event");
window.parent.pingApp();
}
$pp.trigger('pokeApp');
$pp.trigger('pingApp');
}
Извинения. Я исправил синтаксис JSNI для функций. Я все еще наблюдаю одни и те же проблемы. Я забыл отметить, что я использую jquery-2.2.4.min.js. В настоящее время он не работает в режиме конфликтов, если это помогает. Этот вопрос также перекрестно ссылается на форумах SmartGWT, поскольку я также использую эту структуру. – JEberhardt
Помимо методов, которые не вызываются, в консоли вашего браузера нет других ошибок? Вы уверены, что System.out делает то, что, по вашему мнению, делает в браузере? –
Извините, что поздно ответ.Я нашел аналогичный ответ на SO. Я не могу найти OP, но предоставит ссылку, когда попаду на нее. По какой-то причине, когда я добавляю возврат к функциям JSNI, он работает, и я вижу инструкции System.out. – JEberhardt