使用了spring,真的可以简化很多开发,但前提是你懂spring技术,并且环境,架包没错。
今天编写了登录验证的模块,但是就是验证不了,不知道哪里出错了,但是也不好改错,这样还是很费时间的。
错误提示一直是form中的modelAttribute没有接受对象
Neither BindingResult nor plain target object for bean name 'user' available as request attribute
,但是我确实是将对象传递了过去。后来就各种找错误,可能有jar,Hibernate的架包缺失,也可能是控制器出错,也可能是配置文件出了问题,百度了很多页没问出来。看了书上的源码后加载测试。经过很多尝试,发现是modelAttribute的key和其对应的类名有对应关系。java中有些规范如:类名首字母大写,其对应得对象小写等,这是一种习惯,意识到其存在并且遵循,可以省去很多麻烦。
@RequestMapping(value="/spring",method=RequestMethod.GET) public String login(Model model) { model.addAttribute(new SpringUser()); System.out.println("get 方法"); return "content01/spring"; } @RequestMapping(value="/spring",method=RequestMethod.POST) public String login(SpringUser user,Errors errors,Model model) { uerValidator.validate(user, errors); if(errors.hasErrors()) { System.out.println("has errors"); return "content01/spring"; } model.addAttribute(user); return "content01/success01"; }
这段代码存在逻辑错误,所以编译不过。
还有就是<component-scan>扫描注册为bean的类,不要只扫描controller包,所以多写项目还是很有用的。
还有就是多个控制器的映射关系,有时候可能不会映射到我们希望的jsp上。