我试图通过调用bootstrap模式为每个数据表行实现删除操作。然后使用username参数向控制器发送删除请求。
$(document).ready(function () {
$('#usersTable').DataTable({
"sAjaxSource": "users/list",
"sAjaxDataProp": "",
"aoColumns": [
{"mData": "username"},
{"mData": "firstName"},
{"mData": "lastName"},
{"mData": "status"},
{"mData": "role.roleName"},
{
mRender: function (data, type, row) {
var linkDel = "<a href=\"#\" onclick=\"fillDeleteFrm(\'username\')\">Delete</a>";
linkDel = linkDel.replace("id", row.id);
linkDel = linkDel.replace("name", row.name);
return linkDel;
}
}
]
})
});
function fillDeleteFrm(username) {
$('#delete-username').val(username);
$('#userDeleteModal').modal('toggle');
return false;
}
称为弹簧控制器的百里香形式:
<div id="userDeleteModal">
<form id="systemUserForm" th:action="@{/userdelete}" th:method="delete">
<input type="hidden" id="delete-username" name="username" th:value="*{username}">
<button type="submit" class="btn btn-primary">Delete</button>
</div>
</form>
相应的弹簧控制器:
@ResponseBody
@RequestMapping(value="/userdelete", method = RequestMethod.DELETE)
public ModelAndView deleteEmployee(@RequestParam String username) {
User user = userService.findUserByUserName(username);
userService.deleteUser(user);
return new ModelAndView("users");
}
即使我调用了删除请求方法,映射也不会路由到此控制器,提醒
HTTP Status 405 - Request method 'GET' not supported
我做错了什么?提前致谢。
答案 0 :(得分:0)
浏览器不支持表单中的DELETE
方法。使用th:method="delete"
,Thymleaf添加了一个隐藏的_method表单字段。
<input type="hidden" name="_method" value="delete">
如果在应用程序中添加[HiddenHttpMethodFilter][1]
过滤器,它会根据_method参数将post请求转换为删除请求。尝试在web.xml文件中添加以下内容。
如果您使用弹簧靴,则会自动包含过滤器。但是在普通的Spring web mvc应用程序中,您必须在web.xml文件中手动添加过滤器。您的应用中可能缺少此过滤器。这就是请求的GET
未转换为DELETE
请求的原因。
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>