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();
}

但我面临的问题是,当这段代码被执行时,servlet 会抛出错误,因为request.getQueryString()它不正确。我怀疑我设置值的request.getQueryString()方式不正确。你能告诉我这里需要做什么吗?

4

2 回答 2

1

请记住,您的 POST 请求如下所示:

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

而您的 GET 请求看起来像:

foo=bar&ipsum=lorem

您可能需要做的是input为原始 QueryString 中的每个参数添加一个。这可能会变得棘手。

所以而不是:

<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 回答