【问题标题】:How to Update All Fields Submitted in a Form - Spring MVC如何更新表单中提交的所有字段 - Spring MVC
【发布时间】:2015-06-24 00:26:23
【问题描述】:

我有一个包含 10 多个字段输入的表单,用户将对其进行更新。提交时,我需要更新对象(按 id)和表单中修改的任何/所有字段(使用 Spring Data JPA 和存储库)。我相信我可以通过将@ModelAttribute 作为绑定到我的对象的方法参数来做到这一点,但我还没有完全理解这一点。这是我的控制器

    @RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST)
    public String saveUser(@ModelAttribute("User") User user, @PathVariable Long id, Model model) {
        user = userRepo.findOne(id); //Spring Repository method to find user by ID  
        // Here is where you'd set all fields of the User object including those modified in the form
        model.addAttribute("user", user);
        userRepo.save(user); //Updates user in database
        return "success";
    }

我正在寻找一种与以下功能完全相同的方法:

user.setName(user.getName());
user.setAddress(user.getAddress));
//etc.

没有显式调用每个 set 方法(字段输入的数量会增加)。

谢谢小伙伴们

【问题讨论】:

    标签: spring forms spring-mvc


    【解决方案1】:

    如果您有一个表单并且您正在使用 ModelAndAttribute,您只需设置要发送到控制器的 id 属性

      <form:input id="id" path="id"/>
                    <form:input id="name" path="name"/>
                    <form:input id="address" path="address"/>
    

    然后在你的控制器中你只需要做你正在做的事情

       @RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST)
    public String saveUser(@ModelAttribute("User") User user, @PathVariable Long id, Model model) {
        user = userRepo.findOne(id); //Spring Repository method to find user by ID  
        // Here is where you'd set all fields of the User object including those modified in the form
        model.addAttribute("user", user);
        userRepo.save(user); //Updates user in database
        return "success";
    }
    

    但是,如果您通过 Ajax 执行此请求,您将需要再次加载实体用户以使用新 ID 在表单中设置新实体。 您可以查看 JQuery load 以再次加载表单元素。

    或者如果保存是通过 HTTP 请求完成的,您必须在保存后刷新页面,因此您需要再次返回 ModelAndView,其中实体用户已经使用 id 更新

        @RequestMapping(value = "/saveUser/{id}", method =                 RequestMethod.POST)
        public String saveUser(@ModelAttribute("User") User user,         @PathVariable Long id, Model model) {
            user = userRepo.findOne(id); //Spring Repository method to find user by ID  
            userRepo.save(user); //Updates user in database
            ModelAndView mav = new ModelAndView(yourview);
            mav.setObject("user", user);
            return mav;
         }  
    

    【讨论】:

    • 再次感谢@paul;当我在我的方法参数中包含我的@ModelAttribute 时,我得到一个HTTP Status 400 - The request sent by the client was syntactically incorrect.。删除注释可解决此问题,但我的对象未使用修改后的字段进行更新。我读过这可能是从 from 提交的日期格式不正确的问题
    • 原来我的问题是我传递了一个应该是 int 的字符串 - 必须提高日志级别才能找到它。谢谢阿甘
    • 我已经发布了一个与您描述的 AJAX 请求相关的问题,因为我在该部门遇到了问题。你可以在这里试一试stackoverflow.com/questions/31013439/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多