在使用SpringMVC进行更新时候,我们会遇到部分更新的情况。一般情况下我们采用的是把model传到页面,然后把需要修改的字段进行显示。不能修改或者不需要修改的进行隐藏传值。这样做麻烦而且数据安全性也没那么高。SpringMVC modelAttribute就能很好的解决部分字段更新问题。
1.首先需要在controller中添加一个方法,该方法用@ModelAttribute进行注解如:
@ModelAttribute
public void updateCustomer(@RequestParam(value="uuid",required=false)Integer uuid,Model model){
if(null != uuid){
//数据库查询你需要更新的实体
CustomerModel customerModel = iCustomerService.getByUuid(uuid);
model.addAttribute("cm", customerModel);
}
}
其中uuid为你更新字段的主键,required设置为false。因为被ModelAttribute注解的方法会在所有@requestMapping注解的方法前运行。注:此处的更新请求我不能进行url/uuid的方式进行请求。因为我无法设置@PathVariable注解的字段为飞必须。这里源码还不是很清楚。所以我无法解决。只能进行url?uuid方式请求!
然后将数据库查询的实体放入model中。以便前台显示。
此时前台更新页面则不需要隐藏不需要更新的字段。如:
<tr>
<td>显示名称</td>
<td><input type="text" name="showName" value="${cm.showName}" class="input"></td>
<td>真实姓名</td>
<td><input type="text" name="trueName" value="${cm.trueName}" class="input"></td>
</tr>
这是部分代码。ID 密码都不进行隐藏传值。当请求发送到update方法:
@RequestMapping(value="update", method=RequestMethod.POST)
public String update( @ModelAttribute("cm")CustomerModel customerModel) {
System.out.println(customerModel);
iCustomerService.update(customerModel);
return "customer/success";
}
此时springMVC会自动把我们更新传递的customerModel与 我们前面放入model中别名为cm的对象进行比较合并。注意这里customerModel的注解名字需要与上面model中的cm别名相同。如此我们就可以进行对象更新。