Spring MVC 3.0 を使用して、基本的な CRUD 操作を備えたメンバー管理システムを開発していますが、コントローラーに問題があります。
Controller メソッドを使用してメンバー レコードを更新できません。「メンバーの追加」フォームを表示および処理するメソッドと、「メンバーの編集」フォームを表示する別のメソッドがあり、すべて正常に動作します。
これが私のコントローラーです:
@Controller
public class MemberController {
private MemberService memberService;
@Inject
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// Show member list
@RequestMapping(value = "/members/list", method = RequestMethod.GET)
public String showMemberList(Map<String, Object> model) {
model.put("members", memberService.getAllMembers());
return "members/list";
}
// Display add member form
@RequestMapping(value = "/members/add", method = RequestMethod.GET)
public String showAddMemberForm(Model model) {
model.addAttribute(new Member());
return "members/add";
}
// Process add member form
@RequestMapping(value = "/members/add", method = RequestMethod.POST)
public String addMember(Member member) {
memberService.addMember(member);
return "redirect:list";
}
// Display edit member form
@RequestMapping(value = "/members/edit/{id}", method = RequestMethod.GET)
public String showEditMemberForm(Model model, @PathVariable int id) {
String idAsString = Integer.toString(id);
model.addAttribute("member", memberService.getMemberById(idAsString));
return "members/edit/{id}";
}
// Process edit member form
@RequestMapping(value = "/members/edit/{id}", method = RequestMethod.POST)
public String updateMember(@PathVariable int id,
HttpServletRequest request, Member member) {
// Uncommenting the next line of code sets the member objects forename attribute
// to "test forename"
// member.setForename("test forename");
// Uncommenting the next line of code gives the following error:
// HTTP Status 405 - Request method 'POST' not supported
//member.setSurname(request.getParameter("surname"));
memberService.updateMember(member);
return "redirect:/members/list";
}
}
これが私の更新方法です:
public void update(Member member) {
jdbcTemplate.update(
"UPDATE members SET forename=?, surname=?, address1=?, address1=?, "
+ "city=?, postcode=? WHERE memberId=?",
member.getForename(), member.getSurname(),
member.getAddress1(), member.getAddress2(), member.getCity(),
member.getPostcode(), member.getId());
}
そして、これが私の Edit Member JSP フォームです。
<sf:form method="POST" modelAttribute="member"
enctype="multipart/form-data" action="/members/edit/${member.id}">
<fieldset>
<table cellspacing="0">
<tr>
<th><label for="member_id">Id:</label></th>
<td><sf:input path="id" size="15" id="member_id" /></td>
</tr>
<tr>
<th><label for="member_forename">Forename:</label></th>
<td><sf:input path="forename" size="15" id="member_forename" /></td>
</tr>
<tr>
<th><label for="member_surname">Surname:</label></th>
<td><sf:input path="surname" size="15" id="member_surname" /></td>
</tr>
<tr>
<th><label for="member_address1">Address 1:</label></th>
<td><sf:input path="address1" size="15" id="member_address1" />
</td>
</tr>
<tr>
<th><label for="member_address2">Address 2:</label></th>
<td><sf:input path="address2" size="15" id="member_address2" />
</td>
</tr>
<tr>
<th><label for="member_city">City:</label></th>
<td><sf:input path="city" size="15" id="member_city" /></td>
</tr>
<tr>
<th><label for="member_postcode">Postcode:</label></th>
<td><sf:input path="postcode" size="15" id="member_postcode" />
</td>
</tr>
</table>
<input type="submit" value="Update" />
</fieldset>
</sf:form>
コントローラーの「member.setForename("test forename")」コードがテスト文字列を設定するため、フォームから投稿されたパラメーターを使用して、次のように属性を設定できると考えました。
「member.setSurname(request.getParameter("姓"))」
ただし、これにより HTTP 405 エラーが発生します。Firebug を使用して、「Edit Member」フォームが「forename」、「surname」、「address1」などのパラメーターを投稿していることを確認したので、なぜそれらをリクエストから引き出せないのかわかりません。
私はこれに2日間滞在し、ぐるぐる回っているので、どんな助けでも大歓迎です。