1

私たちは SmartGWT LGPL 4.0 を使用しており、現在、非表示の iFrame (DynamicForm と同じキャンバスで定義されている) を使用して、コールバックでファイルのアップロードをいじっています。ファイルをアップロードした後のサーバーからの応答では、実行中のアラートなどの JavaScript テスト コードが返されます。public static と同じ DynamicForm ファイルで定義された JSNI メソッドにアクセスしようとすると、問題が発生します。応答として返された JavaScript コードでは、「window.parent.document.callbackMethod()」を介してメソッドを呼び出していますが、関数が定義されていないというエラーが発生しています。「window.parent.document」は、SmartGWT によって生成された DOM 内の外側のドキュメントにアクセスする適切な方法ではないようです。

非表示の iFrame とコールバック メソッドを DynamicForm と同じキャンバスで定義するのは正しいですか?

いくつかのコードがあります:

1.- クライアント:

....
NamedFrame iFrame = new NamedFrame(nombreIFrame);
iFrame.setVisible(false);
iFrame.setWidth("1px");
iFrame.setHeight("1px");
.....
dynamicForm = new DynamicForm();
dynamicForm.setTarget(nombreIFrame);
dynamicForm.setAction("rest/archivo/add");
dynamicForm.setCanSubmit(true);
....

//JSNI
public native void miFuncion() /*-{
    $wnd.alert('Hello');
}-*/;

2.- サーバー 1 (動作します)

...
@Produces({ MediaType.TEXT_HTML })
public String upload(...){
...
return "<script>alert('Hello')</script>"
}

3.- サーバー 2 (動作しません)

...
@Produces({ MediaType.TEXT_HTML })
public String upload(...){
...
return "<script>window.parent.document.miFuncion()</script>"
}

よろしくお願いします

  • ブラウザ:Firefox 20.0
  • OS: Ubuntu 11.10
  • SmartClient バージョン: v9.0p_2013-07-14/LGPL 開発のみ (ビルド 2013-07-14)
4

1 に答える 1

2

メソッドをエクスポートする必要があります。

var that = this; $wnd.miFunction = $entry(function() { that.@my.app.client.MyClass::miFunction()(); });

http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#callingを参照してください(staticメソッドの例、上記のインスタンス メソッドの例)

于 2013-09-12T11:40:35.967 に答える