javascriptからjavaGWTメソッドを呼び出さなければならないという要件がありますが、機能しません。例外はスローされませんが、アプリケーションがどこかでハングし、コードが実行されません。電話をかけなくても、アプリケーションは正常に動作します。私のGWTコンパイルは成功しました。Firefoxの開発モードでテストしています。
私のコードはこのようなものです-
class CPClass {
public native void jsCallViewDocument(String objectId)/*-{
$wnd.jsCallViewDocument =
$entry(this.@com.srre.g0a.client.presenter.impl.viewdoc.CPClass::testJS(Ljava/lang/String;)(objectId));
}-*/;
private void testJS(String objectId) {
SC.say("Call successfull" + objectId);
}
private void setDocName(ListGridRecord newRecord, someDTO currDocInfo) {
String anchorTag = "<a href ='#' onclick = \"javascript:jsCallViewDocument('"
+ currDocInfo.getDocName() + "')\">" + currDocInfo.getDocName() + "</a>";
newRecord.setAttribute(Display.GRID_FIELD_DOC_NAME, anchorTag);
}
}
これまで、JSNIを使用して$ wnd.close()や$ wnd.alert()のような単純な呼び出しを行ってきたので、何かが足りない可能性があります。私のクラス(ネイティブメソッドと呼び出されるメソッドが定義されている)はJavaScriptObjectを拡張する必要がありますか、それともそのネイティブメソッドを最初に登録する必要がありますか?