jsp は次のとおりです。
<c:if test="${!empty USERS}">
<form:form method="post" action="requestForFriends.html" commandName="user">
<form:select path="userName">
<c:forEach items="${USERS}" var="user">
<form:option value="${user.userName}"></form:option>
</c:forEach>
</form:select>
<input type="submit" value="Send freindship request" />
</form:form>
</c:if>
コントローラーの関連部分は次のとおりです。
@RequestMapping("/toAddFriend")
public ModelAndView toAddNewFriend() {
Map<String, Object> model = new HashMap<String, Object>();
model.put("USERS", userService.getUsers());
ModelAndView ret=new ModelAndView("addFriend", model);
ret.addObject("user", new User());
return ret;
}
上記のコードを実行すると、フォームを送信したときに新しい User オブジェクトが作成されます。しかし、「送信」をクリックすると、ここに明確に存在するALREADY EXISTING User インスタンスの 1 つを取得したいと思います。
<c:forEach items="${USERS}" var="user">
<form:option value="${user.userName}"></form:option>
コードを変更して既存のオブジェクトを取得するにはどうすればよいですか?
実際、私は既存のインスタンスを取得する醜い方法を知っています。フォームを送信することで、探しているユーザー名と同じユーザー名を持つ新しい User インスタンスを作成できます。次に、DaoImpl クラスで、新しく作成されたユーザーと userName を共有する「古い」ユーザーを照会できます。しかし、それはかなり無駄で醜いので、これ以上良い方法がないとは信じられません。
アップデート
<!-- language: lang-java -->
@RequestMapping(value = "/requestForFriends", method = RequestMethod.POST)
public ModelAndView requestNewFriend(@ModelAttribute("user") User user, BindingResult result) {
System.out.println(user.getUserName());
System.out.println(user.getEmail());
Map<String, Object> model = new HashMap<String, Object>();
model.put("USERS", userService.getUsers());
ModelAndView ret=new ModelAndView("addFriend", model);
ret.addObject("user", new User());
return ret;
}