Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC:更新现有实体_Java_Spring_Spring Mvc_Jpa - Fatal编程技术网

Java Spring MVC:更新现有实体

Java Spring MVC:更新现有实体,java,spring,spring-mvc,jpa,Java,Spring,Spring Mvc,Jpa,实体类 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @NotNull private String firstName; @NotNull private String lastName; @NotNull @Email private String em

实体类

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @NotNull
    private String firstName;
    @NotNull
    private String lastName;
    @NotNull
    @Email
    private String email;
    private String country;
    private String state;
    private String roles;
    private String permissions;
    @NotNull
    @Size(min=6)
    private String password;
    private String telNumber;


    public User() {
    }
    public User(String firstName,String lastName,String email,String roles,String permissions,String password) {
    this.firstName=firstName;
    this.lastName=lastName;
    this.email=email;
    this.roles=roles;
    this.permissions=permissions;
    this.password=password;
    }
    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country= country;
    }

    public String getState() {
        return state;
    }

    public void setMesto(String state) {
        this.state= state;
    }
    public String getRoles() {
        return roles;
    }

    public List<String> getRolesList(){
        if(this.roles.length()>0){
            return Arrays.asList(this.roles.split(","));
        }
        return new ArrayList<>();
    }
    public List<String> getPermissionsLisst(){
        if(this.permissions.length()>0){
            return Arrays.asList(this.permissions.split(","));
        }
        return new ArrayList<>();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    public void setRoles(String roles) {
        this.roles = roles;
    }


    public void setPermissions(String permissions) {
        this.permissions = permissions;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTelNumber() {
        return telNumber;
    }

    public void setTelNumber(String telNumber) {
        this.telNumber = telNumber;
    }
}

您好,我正在寻找使用jpa存储库更新用户的方法。。 我尝试过很多方法,我在1/2的情况下通过互联网浏览,但收到的错误id不存在(就像这一种方法一样)

public User update(User user){
        return userRepository.save(user);
    }
),, 或者它不是在更新用户,而是在创建一个新的。。 我也在使用PasswordEncoder,当我想在password字段中打印用户密码时,它只是空的,是否可以在该字段中键入类似***的密码?
感谢您的帮助

它正在创建新的,而不是更新,因为您没有从表单发送用户的
id
。存储库在幕后检查id是否存在,并使用id更新记录,否则将创建新记录

只需将id作为隐藏字段从视图中发送,它就会更新记录

<input type="hidden" th:field="${id}" />

您的代码有各种错误和误解:

将其更改为类似以下内容:

@Controller
public class UserController {

    @Autowired
    private UserServices userServices;

    @GetMapping("/admin/userlist")
    public String userList(Model model,@RequestParam(defaultValue = "") String email){
        model.addAttribute("users",userServices.findByEmailLike(email));
        return "/admin/userlist";
    }

    @GetMapping("/admin/useractions")
    public String userActions(){
        return "/admin/useractions";
    }

    @PostMapping("/admin/useractions")
    public String updateUser(@ModelAttribute User user) {
        userServices.update(user);

        return "/theNextView";
    }

    @ModelAttribute("user")
    public User getUser(@RequestParam(value = "id", required = false) Integer id) {
        return id !=null ? userServices.findOne(id) : new User();
    }
}
并在编辑表单中添加:

在GET和POST上,如果requestParam
id
设置为URL参数或隐藏字段,则getUser(…)将使用现有用户填充模型


在后一种情况下,此现有用户将被传递给POST处理程序,提交的表单数据将绑定到此现有实例。

将其放置在何处?目前,我将其设置为上限,并且我得到了此错误参数“id”不存在。我还想知道如何在密码字段中键入带有密码值的******?
<input type="hidden" th:field="${id}" />
@Controller
public class UserController {

    @Autowired
    private UserServices userServices;

    @GetMapping("/admin/userlist")
    public String userList(Model model,@RequestParam(defaultValue = "") String email){
        model.addAttribute("users",userServices.findByEmailLike(email));
        return "/admin/userlist";
    }

    @GetMapping("/admin/useractions")
    public String userActions(){
        return "/admin/useractions";
    }

    @PostMapping("/admin/useractions")
    public String updateUser(@ModelAttribute User user) {
        userServices.update(user);

        return "/theNextView";
    }

    @ModelAttribute("user")
    public User getUser(@RequestParam(value = "id", required = false) Integer id) {
        return id !=null ? userServices.findOne(id) : new User();
    }
}