0

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

我有一个像这样的简单形式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-“请求的资源不可用”(7 是一些用户 ID)。A 无法将POST请求映射到控制器操作。我已经尝试过,th:action但它会将我重定向到上一页.../admin/users

任何帮助指针表示赞赏。

4

2 回答 2

1

我终于找到了错误 -$登录@RequestMapping注释。只是$从注释中删除和从return "...url",仅此而已。

于 2016-03-25T11:53:34.777 回答
1

我认为你的网址是错误的。只要不将应用程序部署在 servlets 容器根路径中,它就不会工作,因为 url 缺少应用程序名称。所以一个正确的网址应该是这样的:

<form action="myAppName/admin/users/edit/addRole/${user.userId}" method="POST">

但更好的是使用<c:url>or <spring:url>-tag 这会将应用程序名称添加到 url(如果给定的 url 以 开头/

<form action="<c:url value="/admin/users/edit/addRole/${user.userId}" />" method="POST">

有关更多信息,请查看以下两个答案:

于 2016-03-25T10:19:03.407 回答