【发布时间】:2015-11-23 02:24:48
【问题描述】:
在 Spring MVC 中处理编辑对象的正确方法是什么。假设我有用户对象:
public class User {
private Integer id;
private String firstName;
private String lastName;
//Lets assume here are next 10 fields...
//getters and setters
}
现在在我的控制器中,我有 GET 和 POST 的 url:user/edit/{id}
@RequestMapping(value = "/user/edit/{user_id}", method = RequestMethod.GET)
public String editUser(@PathVariable Long user_id, Model model) {
model.addAttribute("userForm", userService.getUserByID(user_id));
return "/panels/user/editUser";
}
@RequestMapping(value = "/user/edit/{user_id}", method = RequestMethod.POST)
public String editUser(@Valid @ModelAttribute("userForm") User userForm,
BindingResult result, @PathVariable String user_id, Model model) {
if(result.hasErrors()) {
User user = userService.getById(user_id);
user.updateFields(userForm);
}
userService.update(user);
}
现在的问题是我真的需要在 POST 方法中从数据库中获取我的用户并在某些更新方法中一一更新每个字段还是有更好的方法?
我正在考虑为用户使用@PathVariable 并使用转换器从数据库中获取用户,然后以某种方式将来自 POST 方法的参数自动注入该对象。像这样的:
@RequestMapping(value = "/user/edit/{user}", method = RequestMethod.POST)
public String editUser(@Valid @PathVariable("user") User userForm,
BindingResult result, Model model)
但是当我尝试这个时,我遇到了 BindingResults 错误:
java.lang.IllegalStateException: Errors/BindingResult 参数应该在模型属性、@RequestBody 或@RequestPart 参数之后立即声明
有什么简单的方法可以创建控制器来处理对象编辑,还是我需要复制可以一一更改的字段??
顺便说一句,我不能使用 SessionAttributes,因为它会导致多个选项卡出现问题。
【问题讨论】:
-
如果你找到了一个很好的解决方案,请分享它,因为我一直在寻找完全相同的问题。
标签: java spring spring-mvc spring-data