0

以下のjavascript呼び出しを行い、GETからPOSTに変更したい

function redirect() {
    if (window.focus)
        self.focus();
    this.location = "/test/DownloadReport?
     <%=ESAPI.encoder().encodeForJavaScript(request.getQueryString())%>";
}

だから、私は以下をやった -

function redirect() {
    if(window.focus)
        self.focus();
    loc = '/test/DownloadReport';   
    var form = document.createElement("form");
    var input = document.createElement("input");
    input.setAttribute("value", "
    <%=ESAPI.encoder().encodeForJavaScript(request.getQueryString())%>");
    form.appendChild(input);

    form.setAttribute("method", "post");
    form.setAttribute("action", loc);

    document.body.appendChild(form);
    form.submit();
}

しかし、私が直面している問題は、このコードが実行されると、サーブレットがrequest.getQueryString()適切ではないためエラーをスローすることです。request.getQueryString()値の設定方法が間違っているのではないかと疑っています。ここで何をする必要があるか教えてください。

4

2 に答える 2

1

POST リクエストは次のようになることに注意してください。

value=foo%3Dbar%26ipsum%3Dlorem

一方、GET リクエストは次のようになりました。

foo=bar&ipsum=lorem

おそらく行う必要があるinputのは、元の QueryString に for each パラメータを追加することです。これは扱いにくい場合があります。

したがって、代わりに:

<input name="value" value="foo=bar&ipsum=lorem" />

必要なもの:

<input name="foo" value="bar" />
<input name="ipsum" value="lorem" />
于 2013-10-01T15:49:45.310 に答える
0

あなたのやり方は不適切です。

ESAPI Javascript Encoder は、人間が読める JavaScript をUTF-8エスケープ シーケンスに変換します。

次のコードを試してください:

input.setAttribute("value", "<%=request.getQueryString()%>");
input.setAttribute("type","hidden");
于 2013-10-01T15:54:17.230 に答える