Spring MVC学习之四:方法入参的介绍(二)
ndingResult继承于Errors,为属性列表中的命令/表单对象的校验结果,返回错误信息到页面,设置为方法参数后,在视图页面上可以直接获取。
BindingResult result必须和@ModelAttribute同时使用,并且参数要紧挨着。否则会报错。Errors/BindingResult argument declared without preceding model attribute异常。
如下例:1、2报错; 3正常。
//test:1
Java代码
@RequestMapping(params="method=result1")
public String processSubmit1(User user,
Model model, BindingResult result) {
return "/demo1/listBoard";
}
//test:2
Java代码
@RequestMapping(params="method=result2")
public String processSubmit2(@ModelAttribute("user") User user,
Model model, BindingResult result) {
return "/demo1/listBoard";
}
//test:3
Java代码
@RequestMapping(params="method=result3")
public String processSubmit3(@ModelAttribute("user") User user,
BindingResult result,Model model) {
return "/demo1/listBoard";
}
* org.springframework.web.bind.support.SessionStatus status handle for marking form processing as complete, which triggers the cleanup of session attributes that have been indicated by the @SessionAttributes annotation at the handler type level.
可以通过该类型 status 对象显式结束表单的处理,这相当于触发 session 清除其中的通过 @SessionAttributes 定义的属性
例子:使用 SessionStatus 控制 Session 级别的模型属性
Java代码
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(@ModelAttribute Owner owner,
BindingResult result, SessionStatus status) {//<——①
new OwnerValidator().validate(owner, result);
if (result.hasErrors()) {
return "ownerForm";
}
else {
this.clinic.storeOwner(owner);
status.setComplete();//<——②
return "redirect:/owner.do ownerId=" + owner.getId();
}
}
processSubmit() 方法中的 owner 表单对象将绑定到 ModelMap 的“owner”属性中,result 参数用于存放检验 owner 结果的对象,
而 status 用于控制表单处理的状态。在 ② 处,我们通过调用 status.setComplete() 方法,
该 Controller 所有放在 session 级别的模型属性数据将从 session 中清空。