警告:不支持请求方法'GET'

时间:2013-04-19 04:27:37

标签: java javascript spring jsp

在我的Spring应用程序中,我这样做..

我的Jsp表单点击超链接表单将被发送..

<form:form action="user" modelAttribute="NAME">

   <a href="href_form1" onclick="onClick_Save()" class="save">Save</a>

</fomr:form>
<script>
  function onClick_Save() {
    $("#NAME").attr("action", $('.save').attr("href"));
    $("#NAME").submit();
     });
</script>

在我的Controller类中,我编写了方法。

@RequestMapping(value = "href_form1", method = RequestMethod.POST)
public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception {
    //Database code here.       
    model.addAttribute("NAME", userForm);
    return "User Updated";
}

EDIT1:

WARNING: Request method 'GET' not supported

我正在收到错误页面。

HTTP Status 405 - Request method 'GET' not supported
修改下面的代码后

编辑

   <script>
  $(function() {
   $('.save').on("click",function(e) {
     e.preventDefault();
     $("#NAME").attr("action", $(this).attr("href")).attr("method","POST");
     $("#NAME").submit();
   });
  });
</script>

但我的表单无法达到我的控制器方法。

我的代码有什么问题吗?我还在表单标记中尝试了method="POST"

4 个答案:

答案 0 :(得分:1)

以下是您收到错误的原因

链接的href在单击时调用控制器,因为您没有取消链接的默认操作

所以代码执行以下操作

  1. 尝试将表单的操作设置为链接的href
  2. 尝试使用POST提交所述表单 - 这是我理解你想要实现的目标。
  3. 无论这是否成功,浏览器都会立即跟随链接的href,该链接将尝试使用GET调用控制器,如果onclick没有停止该操作,链接将会执行。即使代码成功发布表单,该请求也会被新请求终止,最终执行GET
  4. 在我看来,你有以下几种可能性 - 其中一些被认为比其他人更好。

    非javascript

    1. 有一个参数,其中包含您要保存的内容的标识 - 以及每个参数的表单
    2. 将您的弹簧方法改为
      method = { RequestMethod.GET, RequestMethod.POST}
      method = RequestMethod.GET - GET将允许您删除表单并且只有以下链接(当然更新弹簧代码后)
    3.  <a href="href_link?user=user1">Save User1</a>
      

      如果您愿意

      JavaScript辅助

      在表单中包含一个参数,其中包含您要保存的内容的标识,通过JavaScript设置THAT并执行 MANDATORY return falsepreventDefault取消链接:

      <!-- this is an example of the rendered form -->
      <form action="href_form1" id="NAME" method="POST">
        <input type="hidden" name="saveItem" id="saveItem" value="" />
      </form>  
      
      <a href="#" class="saveLink" data-save="save item 1">Save item 1</a>
      <a href="#" class="saveLink" data-save="save item 2">Save item 2</a>
      <a href="#" class="saveLink" data-save="save item 3">Save item 3</a>
      

      请注意我在href中没有链接以避免请求某些内容

      使用此过程的jQuery:

      $(function() {
        // assuming form ID="NAME"
        $(".saveLink").on("click",function(e) { 
           e.preventDefault(); // do not follow link
           $("#saveItem").val($(this).data("save")); // set the hidden field
           $("#NAME").submit();
        });
      });
      

      这可能是一种更有趣的方式,假设您的弹簧控制器已经连接起来处理您的请求:

      DEMO

        $(function() {
         $('.save').on("click",function(e) { // passing event
           e.preventDefault(); // jQuery will normalise it for all modern browsers
           // post the href of the link to the server and return the result in a 
           // container with ID result
           $.post($(this).attr("href"), function(data) { // or $.get if you want
             $('#result').html(data);
           });
        });
      

答案 1 :(得分:1)

您需要在method标记中指定form。是的,您的超链接忽略了表单。因此,将表单上的action属性设置为href_form1并将您的超链接更改为提交输入或(我不建议这样做)更改您的超链接以进行JavaScript提交。目前,您已在链接中设置了onclick href。以下是最佳做法。

<form:form action="href_form1" modelAttribute="NAME" method="POST">
    <input type="submit" value="Save" />

此外,您的jQuery选择器$("#NAME")找不到任何内容,因为您尚未在要获取的表单上设置id属性。

答案 2 :(得分:1)

请尝试这样的事情

<form:form action="href_form1" modelAttribute="NAME" method="POST">
  <input type="submit"/>
</form:form>

@RequestMapping(value = "href_form1", method = RequestMethod.POST)
public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception {
    //Database code here.       
    model.addAttribute("NAME", userForm);
    return "User Updated";
}

基本上是一个非常简单的表单提交。一旦你完成这项工作,你知道你的表单和控制器已正确设置。在此之后,如果您想使用锚标记提交表单,请返回之前的建议preventDefault,然后表单提交。

希望这有帮助。

答案 3 :(得分:0)

表单提交的默认http方法是GET。由于你想要POST,请指明它,它将起作用lie method="POST"

此外,我在代码中没有看到正确的url映射。你能否确认一下是否正确。