GWT从applet调用JS方法

时间:2013-03-19 16:48:50

标签: java javascript gwt applet

我试图从applet调用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();

当applet运行时,它说

  

JavaScript对象上没有这样的方法“alert2”

没关系,我知道代码是混淆的,但我想这是方法保持其名称的方式,但不起作用,我仍然在客户端看到这个

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

我想念的是什么?!,谢谢

更新:

HTMLPanel包含一个带有此String的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>

1 个答案:

答案 0 :(得分:2)

看来你的问题是,当你调用它时,窗口中没有该方法。这可能是因为三个原因:

  • 在gwt排列的异步加载发生之前你的appled运行。
  • 您未在export()
  • 中调用onModuleLoad()方法
  • 您的alert2方法不是静态的

无论如何,如果您想在不使用单行jsni的情况下导出类和方法,可以尝试gwtexporter,在您的情况下,您的代码可能如下所示:

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

在不编写jsni的情况下导出函数的另一个好方法是使用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));
  }
});