2015-03-25 118 views
0

这是我的形式:请求方法“POST”春不支持MVC

<form action="${pageContext.request.contextPath}/admin/editc" method="POST" id="editForm"> 
    <input type="text" name="username" class="form-control" /> 
    <input type="text" name="password" class="form-control" /> 
    <input type="submit" value="submit" > 
</form> 

这是我的控制器方法:

@RequestMapping(value = "/admin/edit", method = RequestMethod.GET) 
public ModelAndView editPage() { 

    ModelAndView model = new ModelAndView(); 
    model.addObject("title", "User edit Form - Database Interaction"); 
    model.addObject("message", "This page is for ROLE_ADMIN only!"); 
    model.setViewName("editpage"); 
    System.out.println("getting edit page"); 

    return model; 

} 


@RequestMapping(value = "/admin/editc", method = RequestMethod.POST) 
public ModelAndView updateCredentials() { 
//  System.out.println("Username= "+username+" password= "+password); 
    ModelAndView model = new ModelAndView(); 
    model.addObject("title", "Credential Edit Operation"); 
    model.addObject("message", "You are successfully updated your credentials"); 
    model.addObject("edited", "TRUE"); 
    model.setViewName("editpage"); 
    System.out.println("executed updateCredentials POST method"); 

    return model; 

} 

现在的问题是我收到405错误控制台类似如下:

org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported 
WARNING: Request method 'POST' not supported 

任何人都可以帮我解决这个错误吗?

+0

我在发布的代码中看不到任何错误。其他事情出错了。它很难说出它可能出错的地方。要进一步调试,您的电话工作正常吗?如果是这样,当服务器启动时,它会吐出请求映射的细节。检查映射是否绑定到控制器。 – minion 2015-03-25 18:49:54

回答

0

您的java方法的签名是错误的,您还需要添加您期望从POST中获得的内容。看看这个guide来更正你的代码。

+0

您的意思是@ModelAttribute(...)注释@daniele。我之前拥有它,当时它不工作 – 2015-03-25 11:57:52

+0

我的意思是@damien答案的相同签名,并且您应该为GET添加另一个处理程序。请注意,对于POST处理程序,您需要接受具有 – daniele 2015-03-25 12:11:05

+0

格式字段的类的参数。将model属性作为控制器方法的参数不一定是正确的。 – minion 2015-03-25 18:50:42

0

您首先需要一个GET方法来显示表单和一个POST来提交它。

@RequestMapping(value = "/admin/editc", method = RequestMethod.GET) 
public ModelAndView updateCredentials() { 
    return new ModelAndView("editPage"); 
} 

@RequestMapping(value = "/admin/editc", method = RequestMethod.POST) 
public ModelAndView updateCredentials(@ModelAttribute UserCredentials credentials) { 
    someService.save(credentials); 
    ... 
} 
+0

嗨@Damien recheck我有Get方法的问题。 – 2015-03-25 11:53:35

+0

但是你的post方法不包含任何属性值。您的表单将尝试找到一个处理程序,该处理程序使用模式中的内容,就像我的示例中的UserCredentials对象包含用户名和密码字符串字段。 – 2015-03-26 06:22:26

+0

即使我添加了用户名和密码的方式,但它不起作用,然后通过删除这些参数进行测试。 – 2015-03-26 07:23:07