我们正在使用SmartGWT LGPL 4.0,现在我们正在使用隐藏的iFrame(在与DynamicForm相同的画布中定义)来回调文件上传和回调。在上传文件后来自服务器的响应中,我们发送了一些javascript测试代码,例如正在执行的警报。当尝试访问在与public static相同的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>"
}
祝你好运
答案 0 :(得分:2)
您必须导出您的方法:
var that = this; $ wnd.miFunction = $ entry(function(){ 那@ my.app.client.MyClass :: miFunction()(); });
请参阅http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#calling(有static
方法的示例,上面的实例方法示例)