数据绑定Spring

时间:2012-02-06 22:00:20

标签: java spring data-binding

我有一个我在请求中放入的Contact对象,该对象在中被修改 然后获取修改后的对象。我希望返回的对象与您发送的对象相同,保留不在表单中的属性的值。

class Contact{

     private String name;          // this attributes will be modified
     private String lastName;

     private Long id;
     private Date created;        // this atributes will not be modified

     // getters and setters ....

}


    @RequestMapping(value = "/{id}/edit", method = RequestMethod.GET)
    public String updateContact(@PathVariable("id") Long id, Model model) {

         Contact c = contactDao.get(id);
         model.addAttribute("contact", c);

         return "contact/form";

    }



     @RequestMapping(value = "/{id}/edit", method = RequestMethod.POST)
     public String update(@PathVariable("id") Long id, @Valid @ModelAttribute Contact contact, BindingResult result, Model model) {

        // The contact I get here I want to keep the original attributes of the
       // object sent, and have the changes in the fields shown on the form. is that possible?

        return "redirect:/contact";
  }


   <form:form action="${pageContext.servletContext.contextPath}/tags/create"            commandName="contact">

              <form:input path="name"/>
              <form:errors path="name" cssClass="formError"/>
              <form:input path="lastName"/>

   </form:form>

我不想使用隐藏字段来维护不会改变的属性的值

3 个答案:

答案 0 :(得分:0)

如果您只想在表单中处理某些字段,请创建一个新类 - 仅包含它们的ContactDTO,然后手动(或通过反射)将它们复制到原始Contact对象(你从DB加载id)

答案 1 :(得分:0)

我通过将联系对象声明为会话中的对象

来找到问题的解决方案
@Controller
@RequestMapping("/contact")  
@SessionAttributes("contact")
public class ContactController {

....
....


    @RequestMapping(value = "/{id}/edit", method = RequestMethod.GET)
    public String updateContact(@PathVariable("id") Long id, Model model) {

        Contact c = contactDao.get(id);
        model.addAttribute("contact", c);
        return "contact/form";

    }


    @RequestMapping(value = "/{id}/edit", method = RequestMethod.POST)
    public String update(@PathVariable("id") Long id, @Valid @ModelAttribute Contact contact, BindingResult result, Model model) {

        contactDao.update(contact);

        return "redirect:/contact";
    }
}

答案 2 :(得分:-1)

你的持久性框架是什么?是JPA还是Hibernate?如果是,请使用 @Column(updatable = false)

注释该字段