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 を使用し、ウィンドウの代わりに $wnd を使用して、適切なウィンドウとドキュメント オブジェクトを使用してください。(これは、さまざまなブートローダーと GWT、およびコードのロード方法に関係しています) ウィンドウ オブジェクトが子フレームを指す場合があります。$wnd と $doc はコンパイラによって設定され、常に正しいものを指します。

あなたがやろうとしていることのためにJSNIに行く必要はないことを覚えておいてください...

于 2012-07-13T06:13:10.007 に答える