/**
* @Description:表单控制器
*
* @author youyang_java@139.com
*
*/
@Controller
@RequestMapping("/edit.htm")
@SessionAttributes("curDemo")
public class FormController {
@Resource
private Validator demoValidator;
@InitBinder
public void initBinder(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(format,false));
}
@ModelAttribute("birthes")
public Map<String, String> getList(){
Map<String, String> map = new HashMap<String, String>();
map.put("2011-4-28","生日1");
map.put("2011-5-2","生日2");
map.put("2011-6-28","生日3");
map.put("2011-6-2","生日4");
return map;
}
@RequestMapping(method=RequestMethod.GET)
public String setUpForm(@RequestParam(required=false)String name,ModelMap map){
Demo demo = new Demo();
if (StringUtils.isNotBlank(name)) {
System.out.println(name);
demo.setName(name);
demo.setId(1l);
}
map.put("curDemo", demo);
return "/test/editForm";
}
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@ModelAttribute("curDemo")Demo demo,BindingResult result,SessionStatus status,ModelMap map){
demoValidator.validate(demo, result);
if (result.hasErrors()) {
return "/test/editForm";
}
Demo curDemo = (Demo) map.get("curDemo");
System.out.println("curDemo------"+curDemo.getId());
System.out.println("curDemo------"+curDemo.getName());
System.out.println("curDemo------"+curDemo.getBirth());
System.out.println(demo.getId());
System.out.println(demo.getName());
System.out.println(demo.getBirth());
status.setComplete();
return "redirect:/success.htm";
}
}
@InitBinder
public void initBinder(WebDataBinder binder)
@InitBinder注解将定制的属性编辑器注册到绑定对象上。
@ModelAttribute("birthes")
public Map<String, String> getList()
把@ModelAttribute注解使用到方法上,则在表单在展示前会调用该方法,并把方法的返回值放到模型中。
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@ModelAttribute("curDemo")Demo demo,BindingResult result,SessionStatus status,ModelMap map)
把@ModelAttribute注解使用到方法参数上,可以从模型中得到命令对象,并绑定到方法上。不过该注解可以不使用。
status.setComplete();
表单执行完成,清空session里面的值。