如何使用弹簧形式和控制器更新实体的一个或几个属性?
让我们说它是用户实体,并具有ID,状态,名称,地址等... 我想更新名称和地址。但是当我尝试保存ather值时为null。 ı不想逻辑地显示表格中的所有属性(Id,状态)
答案 0 :(得分:0)
您可以使用隐藏的输入元素将用户ID传播到您的视图,例如
<input type="hidden" name="user-id" value="${editUserForm.id}">
将其放在表单中 - 提交表单时,还会提交用户ID(请记住将ID添加到表单模型中)。然后使用此ID从数据库中检索用户,设置要设置的字段并进行更新。
编辑:
实施例: 你的模特:
@Entity
public class User{
private Long id;
private String name;
private String surname;
//getters & setters
}
表单用于编辑某些字段(无姓):
public class UserForm{
private Long id;
private String name;
//getters & setters, constructor
}
控制器:
@GetMapping(value="/editUser/{userId}")
public ModelAndView editUser(@PathVariable Long userId){
ModelAndView modelAndView = new ModelAndView("editUser");
User user = // retrieve user from database using userId
modelAndView.addObject("editUserForm", new UserForm(user));
return modelAndView;
}
@PostMapping(value="/editUser")
public ModelAndView postEditUser(@ModelAttribute("editUserForm") UserForm editUserForm){
User userToEdit = //retrive user from database using editUserForm.getId()
userToEdit.setName(editUserForm.getName());
//save user to database
//redirect
}
当然,我在控制器中呈现的逻辑应该位于服务层,我只是想让你知道该怎么做。