2016-03-25 18 views
0

これまたは類似の質問が既に頼まれている場合は事前に謝りますが、適切な回答が見つからない場合は事前にお詫びします。春mvc:コントローラのアクションにマップフォームのアクションURLがありません

は、私が(:.../admin/users/edit/{userId}にマッピングされた):EditUser.jspでこのような単純な形を持っている

このような
<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にリダイレクトされています。

ありがとうございました。

+1

「th:action」はthymeleaf属性ですが、jspを使用していますので、これは役に立ちません – Ralph

答えて

1

あなたは間違っていると思います。サーブレットコンテナのルートパスにアプリケーションをデプロイしない限り、urlにはアプリケーション名がないため、アプリケーションは機能しません。だから、正しいURLは次のようなものになるだろう:(指定したURLが/で始まる場合)、これはURLにアプリケーション名を追加 - タグ<c:url>または<spring:url>を使用しています

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

しかし、より良いを

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

+0

ありがとうございました。あなたの提案されたリソースは非常に便利ですが、私を助けなかった - 問題は依然として残っています。 – dim

1

を私は最終的にエラーが見つかった - @RequestMapping注釈で$サイン。アノテーションから$を削除し、return "...url"から削除しました。

関連する問題