現在、私はGWTプロジェクトで作業中です。外部のJavaScriptファイルで使用する必要があります。私は両側が適切に働いていることを確認するためのテストプロトタイプを今作成しています。GWT JSNIを使用してjsファイルと統合する
実行してコンパイルすると、呼び出されたイベントからブラウザにコンソールログが表示されます。ただし、GWT Javaメソッドは呼び出されていません。
多くのシナリオを試した後、exportStaticMethods()
から$entry
ラッパーを削除すると、逆のことが起こることに気付きました。 System.out
がJavaコードで呼び出されているのが見えますが、ブラウザのJavaScriptからのコンソールログは呼び出されていません。
私はこの現象の原因を突き止めようとしていますが、欠落している小さな欠点がある場合は見落としています。
私は既にcalling a Java method from jsのGWT JSNIのドキュメントを見直し、StackOverflowに関する他の関連する質問から解決策を見つけようとしました。
GWTとJava側
私は私のEntryPoint
クラスのonModuleLoad()
方法に入ったとexportStaticMethods()
という静的メソッドが追加されました。私はまた、PokePingClass.java
ファイルを作成しました。プロジェクトの.html
ファイルで
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
、私は「IDの隠された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