1

我正在开发一个需要将数据发送到远程 cognos 服务器以运行一些报告的 GWT 应用程序。我正在使用本机 javascript 代码发送数据,但不知何故 cognos 服务器没有接收到所有数据,我们将大数据作为 URL 中的参数发送。这是代码:

private static native void openReportWindow(String action, String uiObject, String reportName, String reportParams) /*-{
    var form = document.createElement("form");
    form.setAttribute("method", "POST");
    form.setAttribute("action", action);
    form.setAttribute("target", "reports");

    var reportValues = new Array();
    reportValues = reportParams.split('&');

    for(var i=0;i<reportValues.length;i++) {
        var tempArr = new Array();
        tempArr = reportValues[i].split('=');
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("name", tempArr[0]);
        hiddenField.setAttribute("value", tempArr[1]);
        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);

    // open a new window to display the reports
    window.open(action, 'reports', 'scrollbars=yes,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');
    form.submit();

}-*/;

有一个更好的方法吗?

感谢所有的帮助。

4

1 回答 1

1

您不应使用 JSNI 创建和提交表单。您可以使用完整的 Java API 来做到这一点。

无论如何,如果您使用 JSNI 这样做,请确保使用 $doc 而不是 document 和 $wnd 而不是 window 来使用正确的 window 和 document 对象。(这与不同的引导加载程序和 GWT 以及代码的加载方式有关)有时窗口对象将指向子框架。$wnd 和 $doc 由编译器设置并且总是指向正确的。

请记住,没有必要去 JSNI 做你想做的事......

于 2012-07-13T06:13:10.007 回答