【问题标题】:POST method reading query parameter instead of form fieldPOST 方法读取查询参数而不是表单字段
【发布时间】:2012-08-14 20:19:49
【问题描述】:

我有jsp,它有方法action="POST"。 最初,这个 jsp 通过一个控制器(Spring)在 URL 中使用查询字符串 param1=paramValue1 调用。 (例如 /thisJsp.jsp?param1=paramValue1)。 Spring 在这里使用了 GET 方法,因此读取了查询参数。

稍后我会通过 javascript 设置一个隐藏的表单输入字段 $('#param1').val(paramValue2) 来提交()。

我的问题是回到控制器,它注册方法操作是 POST,但是 当我执行 request.getParameter("param1") 时,它总是返回 paramValue1。

使用 Fiddler,我看到 param1=paramValue2 已注册,这意味着它是在 submit() 上设置的。

我错过了什么?

我正在使用 Tomcat 服务器和 Spring 2.0.7

【问题讨论】:

    标签: spring tomcat spring-mvc


    【解决方案1】:

    你能看到 POST 要去的 URL 吗?您的表单可能会或可能不会设置其“操作”属性。如果没有设置,那么它将 POST 到页面当前所在的相同 URL。这可能会导致您发布到查询字符串中带有 ?param1=paramValue1 的 URL,但随后在帖子正文中也有 param1=paramValue2 的情况。您可以更改表单,以便将其操作设置为“/thisJsp.jsp”而没有查询字符串,这可能会解决您的问题。

    一般来说,在一个请求中多次包含相同的命名参数是有效的,无论是 GET 还是 POST。您也可以尝试在控制器中调用 request.getParameterValues("param1") ,这将返回一个字符串数组。这将是一个很好的测试,看看您是否确实传递了 param1 的两个值。

    【讨论】:

    • 来自Controller:request.getMethod()反映POST,request.getParameterValues返回item [0]=paramValue1 [1]=paramValue2 ...但是为什么POST仍然返回[0] item?
    • 因为您要发布到带有包含 param1=paramValue1 的查询字符串的 URL。所以参数被指定了两次:一次在查询字符串中,一次在帖子正文中。服务器读取这两个值。将表单的“action”属性设置为控制器的 URL,不带任何查询字符串,您应该已经设置好了。
    猜你喜欢
    • 2020-02-20
    • 2014-11-22
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多