1

我们正在使用 SmartGWT LGPL 4.0,现在我们正在使用隐藏的 iFrame(在与 DynamicForm 相同的画布中定义)使用回调处理文件上传。在上传文件后来自服务器的响应中,我们发回了一些 JavaScript 测试代码,例如正在执行的警报。当尝试访问与公共静态相同的 DynamicForm 文件中定义的 JSNI 方法时,就会出现问题。在作为响应发回的 javascript 代码中,我们通过“window.parent.document.callbackMethod()”调用该方法,但我们收到一条错误消息,指出该函数未定义。似乎“window.parent.document”不是访问 SmartGWT 生成的 DOM 中的外部文档的正确方法。

在与 DynamicForm 相同的画布中定义隐藏的 iFrame 和回调方法是否正确?

有一些代码:

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>"
}

此致

  • 浏览器:火狐20.0
  • 操作系统: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 回答