我收到此错误: HTTP Status 405 - Request method 'POST' not supported
HTTP Status 405 - Request method 'POST' not supported
我正在尝试做的是创建一个带有下拉框的表单,该表单会根据在另一个下拉框中选择的其他值进行填充。例如,当我在customerName框中选择一个名称时,onChange应运行.jsp页面中的函数,然后提交提交的页面,然后在customerCountry框中再次加载相应的值。
customerName
onChange
customerCountry
但是我收到此HTTP状态405错误。我在互联网上搜索了解决方案,但找不到任何有帮助的方法。这是我的代码的相关部分:
jsp页面的一部分
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> .error { color: red; } </style> <script> function repopulate(){ document.deliveryForm.submit(); } function setFalse(){ document.getElementById("hasId").value ="false"; document.deliveryForm.submit(); // document.submitForm.submit(); (This was causing the error) } </script> </head> <body> <h1>Create New Delivery</h1> <c:url var="saveUrl" value="/test/delivery/add" /> <form:form modelAttribute="deliveryDtoAttribute" method="POST" action="${saveUrl}" name="deliveryForm"> <table> <tr> <td><form:hidden id="hasId" path="hasCustomerName" value="true"/></td> </tr> <tr> <td>Customer Name</td> <td><form:select path="customerName" onChange="repopulate()"> <form:option value="" label="--- Select ---" /> <form:options items="${customerNameList}" /> </form:select> </td> <td><form:errors path="customerName" cssClass="error" /></td> </tr> <tr> <td>Customer Country</td> <td><form:select path="customerCountry"> <form:option value="" label="--- Select ---" /> <form:options items="${customerCountryList}" /> </form:select> </td> <td><form:errors path="customerCountry" cssClass="error" /></td> </tr> </form:form> <form:form name="submitForm"> <input type="button" value="Save" onClick="setFalse()"/> </form:form> </body> </html>
控制器的一部分:
@RequestMapping(value = "/add", method = RequestMethod.GET) public String getDelivery(ModelMap model) { DeliveryDto deliveryDto = new DeliveryDto(); model.addAttribute("deliveryDtoAttribute", deliveryDto); model.addAttribute("customerNameList", customerService.listAllCustomerNames()); model.addAttribute("customerCountryList", customerService .listAllCustomerCountries(deliveryDto.getCustomerName())); return "new-delivery"; } // I want to enter this method if hasId=true which means that a value in the CustomerName // drop down list was selected. This should set the CountryList to the corresponding values // from the database. I want this post method to be triggered by the onChange in the jsp page @RequestMapping(value = "/add", method = RequestMethod.POST, params="hasCustomerName=true") public String postDelivery( @ModelAttribute("deliveryDtoAttribute") DeliveryDto deliveryDto, BindingResult result, ModelMap model) { model.addAttribute("deliveryDtoAttribute", deliveryDto); model.addAttribute("customerNameList", customerService.listAllCustomerNames()); model.addAttribute("customerCountryList", customerService .listAllCustomerCountries(deliveryDto.getCustomerName())); return "new-delivery"; } // This next post method should only be entered if the save button is hit in the jsp page @RequestMapping(value = "/add", method = RequestMethod.POST, params="hasCustomerName=false") public String postDelivery2( @ModelAttribute("deliveryDtoAttribute") @Valid DeliveryDto deliveryDto, BindingResult result, ModelMap model) { if (result.hasErrors()) { model.addAttribute("deliveryDtoAttribute", deliveryDto); model.addAttribute("customerNameList", customerService.listAllCustomerNames()); model.addAttribute("customerCountryList", customerService .listAllCustomerCountries(deliveryDto.getCustomerName())); return "new-delivery"; } else { Delivery delivery = new Delivery(); //Setters to set delivery values return "redirect:/mis/home"; } }
我怎么会得到这个错误?任何帮助将非常感激!谢谢
编辑: 更改hasId为hasCustomerName。我仍然收到HTTP Status 405 - Request method 'POST' not supported错误。
hasId
hasCustomerName
EDIT2: 注释掉setFalse导致错误的函数中的行
setFalse
// D
我发现了导致HTTP错误的问题。
在“ setFalse()保存”按钮触发的函数中,我的代码试图提交包含该按钮的表单。
setFalse()
function setFalse(){ document.getElementById("hasId").value ="false"; document.deliveryForm.submit(); document.submitForm.submit();
当我删除document.submitForm.submit();它的作品:
document.submitForm.submit();
function setFalse(){ document.getElementById("hasId").value ="false"; document.deliveryForm.submit()
@RogerLindsjö感谢您发现我没有传递正确参数的错误!