gwt使用本机javascript发送远程服务器的POST请求失败

时间:2012-07-12 23:08:30

标签: javascript gwt

我正在开发一个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();

}-*/;

有更好的方法吗?

感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

您不应该使用JSNI来创建和提交表单。您可以使用完整的Java API执行此操作。

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

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