1

アプレットから Javascript メソッドを呼び出そうとしています。いくつかの例を読みましたが、何も機能しません。

アプレット:

        JSObject window = JSObject.getWindow(this);
        String[] args = new String[]{"some string"};
        window.call("alert2 ", args);

GWT、ビュー

    public static native void export() /*-{
    $wnd.alert2 = function(result) {
        @cl.covepa.client.main.shared.view.DlgVerificarHuellaView::alert2(Ljava/lang/String;)(result);
    }
}-*/;

public static void alert2(String result) {
    Dialogs.getInstance().alert("CONFIRMACION :" + result);
}

コンストラクター呼び出しで、onModuleLoad もテストします。

export();

アプレットが実行されると、それは言う

JavaScript オブジェクトにそのようなメソッド「alert2」はありません

わかりました。コードが難読化されていることは理解していますが、これがメソッドの名前を保持する方法だと思いますが、機能しません。クライアント側でまだこれが表示されます

function dBb(){$wnd.alert2=function(a){T2c((!S2c&&(S2c=new X2c),S2c),'CONFIRMACION :'+a)}}

私が恋しいもの?!、ありがとう

アップデート :

HTMLPanel には、この文字列を持つ HTML オブジェクトが含まれており、show DialogBox に追加されます。

<div> 
   <applet id="uploadApplet" code="app.VerifHuella.class" 
           archive="VerificarHuella.jar" width="322" height="465" MAYSCRIPT>
       <param name="RUT" value="15645322"/>
   </applet> 
</div>
4

1 に答える 1

2

あなたの問題は、メソッドを呼び出すときにウィンドウでメソッドを使用できないことです。これは、次の 3 つの理由で発生する可能性があります。

  • gwt 順列の非同期読み込みが発生する前に実行されました。
  • あなたはあなたのexport()メソッドを呼び出していませんonModuleLoad()
  • あなたの alert2 メソッドは静的ではありません

とにかく、jsni を 1 行も使用せずにクラスとメソッドをエクスポートしたい場合は、 gwtexporter を試すことができます。この場合、コードは次のようになります。

 class DlgVerificarHuellaView implements Exportable {
    @Export($wnd.alert2)
    public static void alert2(String msg) {
    }
 }

jsni を書かずに関数をエクスポートするもう 1 つの良い方法は、 gwtquery を使用することです

import static com.google.gwt.query.client.GQuery.*

Properties wnd = window.cast();
wnd.setFunction("alert2", new Function() {
  public void f() {
    Properties arg = getDataProperties();
    DlgVerificarHuellaView.alert2(arg.get(0));
  }
});
于 2013-03-19T20:32:37.420 に答える