私の理解が正しければ、Javascript から GWT メソッドを呼び出す必要があります。JSNI を使用できます。しかし、GWT 側で gwt-exporter を試す必要があると思います。概要。チュートリアル。GWT モジュール用の JS_API を作成するのは単純な GWT モジュールです。
ベストプラクティスのふりをするのではなく、簡単な例です。
サーバー側では、すべてのページに DialogBoxes を備えた既存の GWT モジュールを含めます。この GWT モジュールを変更するか、このように新規作成する必要があります。
public class GwtModule implements EntryPoint {
@Override
public void onModuleLoad() {
// exportable class
DialogBoxManager dbm = new DialogBoxManager();
// export all Exportable classes of module
ExporterUtil.exportAll();
// needed cause JS_API will be available only after the GWT is loaded
onLoad();
}
// call when GWT module loaded
private native void onLoad() /*-{
$wnd.loaded();
}-*/;
DialogBoxManager は次のようになります
@Export
@ExportPackage("pkg")
public class DialogBoxManager implements ClickHandler, Exportable {
private DialogBox db;
public DialogBoxManager() {
this.db = new DialogBox();
}
@Export("showDB")
public void showDialog() {
db.setVisible(true);
db.center();
db.show();
}
@Override
public void onClick(ClickEvent event) {
showDialog();
}
}
@Export("show")、@ExportPackage("pkg") などの文字列値。注釈は、注釈付き GWT メソッドの JS_API 呼び出しで使用されます (フィールドもエクスポートできます)。@Export だけを使用できます (DialogBoxManager で行ったように)。
GWT モジュールが JS ライブラリにロードされると、JS_API メンバーの初期化または必要なものを実現できます。
var dbManager = null;
...
function loaded() {
dbManager = new pkg.DialogBoxManager();
}
そして、このように JS_API を呼び出すだけです
function showDB() {
if (dbManager != null) {
dbManager.showDB();
}
}