dli*_*x90 24 javascript java methods spring hibernate
我得到这个错误: HTTP Status 405 - Request method 'POST' not supported
我要做的是创建一个带有下拉框的表单,该表单将根据在另一个下拉框中选择的其他值进行填充.例如,当我在customerName框中选择一个名称时,onChange应运行.jsp页面中的函数,然后提交页面,然后再次使用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>
Run Code Online (Sandbox Code Playgroud)
控制器的一部分:
@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";
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么会得到这个错误?任何帮助将非常感激!谢谢
编辑:更改hasId到hasCustomerName.我仍然得到HTTP Status 405 - Request method 'POST' not supported错误.
EDIT2:注释掉setFalse导致错误的函数行
// D.
Ash*_*ish 22
我不确定这是否有帮助,但我有同样的问题.
您正在使用带有CSRF保护的springSecurityFilterChain.这意味着您必须在通过POST请求发送表单时发送令牌.尝试将下一个输入添加到表单:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
Run Code Online (Sandbox Code Playgroud)
Ren*_*Ren 16
检查您是否正在返回@ResponseBody或@ResponseStatus
我遇到了类似的问题.我的控制器看起来像这样:
@RequestMapping(value="/user", method = RequestMethod.POST)
public String updateUser(@RequestBody User user){
return userService.updateUser(user).getId();
}
Run Code Online (Sandbox Code Playgroud)
使用POST请求调用时,我总是遇到以下错误:
HTTP状态405 - 不支持请求方法"POST"
过了一会儿,我发现该方法实际上已被调用,但由于没有@ResponseBody且没有@ResponseStatus,因此Spring MVC会引发错误.
要解决此问题,只需添加@ResponseBody即可
@RequestMapping(value="/user", method = RequestMethod.POST)
public @ResponseBody String updateUser(@RequestBody User user){
return userService.updateUser(user).getId();
}
Run Code Online (Sandbox Code Playgroud)
或者@ResponseStatus到您的方法.
@RequestMapping(value="/user", method = RequestMethod.POST)
@ResponseStatus(value=HttpStatus.OK)
public String updateUser(@RequestBody User user){
return userService.updateUser(user).getId();
}
Run Code Online (Sandbox Code Playgroud)
您可能需要更改该行
@RequestMapping(value = "/add", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
至
@RequestMapping(value = "/add", method = {RequestMethod.GET,RequestMethod.POST})
Run Code Online (Sandbox Code Playgroud)
我发现了导致 HTTP 错误的问题。
\n\n在setFalse()“保存”按钮触发的函数中,我的代码尝试提交包含该按钮的表单。
function setFalse(){\n document.getElementById("hasId").value ="false";\n document.deliveryForm.submit();\n document.submitForm.submit();\nRun Code Online (Sandbox Code Playgroud)\n\n当我删除它时document.submitForm.submit();,它起作用:
function setFalse(){\n document.getElementById("hasId").value ="false";\n document.deliveryForm.submit()\nRun Code Online (Sandbox Code Playgroud)\n\n@Roger Lindsj\xc3\xb6 感谢您发现我没有传递正确参数的错误!
\n| 归档时间: |
|
| 查看次数: |
105079 次 |
| 最近记录: |