如果已经提出过这个或类似的问题,我会提前道歉,但我找不到合适的答案。
我在EditUser.jsp
中有一个这样的简单表格(映射到:.../admin/users/edit/{userId}
):
<form action="/admin/users/edit/addRole/${user.userId}" method="POST">
<select name="role">
<c:forEach var="role" items="${roles}">
<option value="${role}">${role}</option>
</c:forEach>
</select>
<button type="submit" value="AddRole">Add Role</button>
</form>
@RequestMapping
就像这样:
@RequestMapping(value = "/admin/users/edit/addRole/${userId}", method = RequestMethod.POST)
public String addUserRole(
Model model,
@RequestParam("role") String role,
@PathVariable(value="userId") long userId)
{
...
return "redirect:/admin/users/edit/${userId}";
}
问题是请求的结果:HTTP Status 404 - /admin/users/edit/addRole/7
- &#34;请求的资源不可用&#34; (7是一些用户ID)。 A无法将POST
请求映射到控制器操作。我已尝试使用th:action
,但它会将我重定向到上一页.../admin/users
。
任何帮助指针都赞赏。
答案 0 :(得分:1)
我认为你的网址是错误的。只要您不在servlet容器根路径中部署应用程序,它就无法工作,因为url缺少应用程序名称。所以正确的网址就像是:
receive
但更好的方法是使用<form action="myAppName/admin/users/edit/addRole/${user.userId}" method="POST">
或<c:url>
- 这会将应用名称添加到网址(如果给定的网址以<spring:url>
开头)
/
有关更多信息,请查看以下两个答案:
答案 1 :(得分:1)
我终于在$
注释中找到了错误 - @RequestMapping
。只需从注释和$
中删除return "...url"
即可。