spring3 页面form标签binding错误。**Neither BindingResult***
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'book' available as request attribute
?
昨日在学习spring3的时候,在做一个页面传送对象到后台,也就是说页面binding对象,使用到
<form:form method="POST" modelAttribute="book"> <form:input path="name"/> <form:input path="author"/> <input type="submit" value="Post"></form:form>
?spring的form标签的modelAttribute属性绑定对象Book。结果就出现上述错误,但是由于与本人阅读文档的能力有限,于是看了看文档,马上GOOGLE,结果折腾了一天,终于找到答案.
最后在看看上述错误提示,突然想起是不是要在进入此页面的时候,必须要创建一个book对象,将它放到页面的context中,让spring来注入,于是在controller中添加了多了个RequestMethod.GET方法,用来创建一个book对象将它放到context中,这个context我不知道如何说,这个有点类似struts的context,是用来放值的。
@Controller@RequestMapping("/searchbooks")public class SearchBookController {private IBookService bookService;@Resource(name="bookServiceImpl")public void setBookService(IBookService bookService) {this.bookService = bookService;}@RequestMapping(method=RequestMethod.POST)public String findBooks(@ModelAttribute("book") Book book,BindingResult result,Model model){System.out.println("Book name:"+book.getName()+" author: "+book.getAuthor()+" info:"+book.getInfo());book.setAuthor(null);List<Book> books = bookService.findByEntity(book);model.addAttribute("books", books);return "bookresult";}//在后来再增加下面的方法,用来转到使用到spring form标签的jsp页面。@RequestMapping(method=RequestMethod.GET)public String searchBooks(Model model){Book book = new Book();model.addAttribute("book",book);return "searchbooks";}}
?
总结,在进入spring form标签设定binding对象页面前必须有是有一个需binding的对象放在context中(类似struts的context stack和value stack),spring才能binding。不像struts的页面自动binding。