这是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>
这是 Controller 的相关部分:
@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 对象。但是,当我单击“提交”时我想获取已存在的用户实例之一,这些实例清楚地存在于此处:
<c:forEach items="${USERS}" var="user">
<form:option value="${user.userName}"></form:option>
如何修改代码来获取现有对象?
实际上我知道一种获取现有实例的丑陋方法。通过提交表单,我可以创建一个新的 User 实例,其用户名与我正在查找的用户名相同。然后,在 DaoImpl 类中,我可以查询与新创建的用户共享用户名的“旧”用户。但我认为这是相当浪费和丑陋的,所以我不敢相信没有更好的方法。
更新
<!-- 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;
}
最佳答案
@ModelAttribute
public void fillUsers(Model model) {
model.addAttribute("USERS", userService.getUsers());
}
@ModelAttribute
public void getUser(@RequestParam(required = false) String userName, Model model) {
User user = null;
if (userName != null) {
user = userService.getUserByName(userName);
}
if (user == null) {
user = new User();
}
model.addAttribute("user", user);
}
@RequestMapping("/toAddFriend")
public String toAddNewFriend() {
return "addFriend";
}
@RequestMapping(value = "/requestForFriends", method = RequestMethod.POST)
public String requestNewFriend(@ModelAttribute("user") User user) {
System.out.println(user.getUserName());
System.out.println(user.getEmail());
return "addFriend";
}
关于java - 是否可以在 Spring 中提交包含现有实体的表单?如果是,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12036603/