Spring mvc:我无法将表单操作URL映射到控制器操作

时间:2016-03-25 09:48:27

标签: spring forms spring-mvc jsp-tags request-mapping

如果已经提出过这个或类似的问题,我会提前道歉,但我找不到合适的答案。

我在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

任何帮助指针都赞赏。

2 个答案:

答案 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"即可。