使用ModelAttribute

时间:2016-12-06 14:36:04

标签: spring forms modelattribute

如何使用弹簧形式和控制器更新实体的一个或几个属性?

让我们说它是用户实体,并具有ID,状态,名称,地址等... 我想更新名称和地址。但是当我尝试保存ather值时为null。 ı不想逻辑地显示表格中的所有属性(Id,状态)

1 个答案:

答案 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
    }

当然,我在控制器中呈现的逻辑应该位于服务层,我只是想让你知道该怎么做。