我有一个我在请求中放入的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>
我不想使用隐藏字段来维护不会改变的属性的值
答案 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)
注释该字段