当我提交表单时,modelAttribute保持为null。我查找了我的错误,但我被困在代码中的某处并请求您的帮助......请检查下面的代码
Spring version 4.2.0
<form:form class="form-horizontal" modelAttribute="book"
action="${pageContext.request.contextPath}/book/add" method="post">
<fieldset>
<legend class="center-block">
New Book Information<span style="font-size: small"> * is a
required field</span>
</legend>
<!-- title -->
<div class="form-group">
<label class="col-md-2 control-label" for="title">* Title</label>
<div class="col-md-8">
<form:input type="text" path="title" class="form-control" id="title"
required="required" placeholder="Title" />
<span class="help-block">Title of the book</span>
</div>
</div>
<!-- author -->
<div class="form-group">
<label class="col-md-2 control-label" for="author">*
Author</label>
<div class="col-md-8">
<form:input type="text" path="author" class="form-control" id="author"
required="required" placeholder="Author" />
<span class="help-block">Author of the book</span>
</div>
</div></form:form>
控制器: 得到:
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addBook(Model model) {
Book book = new Book();
model.addAttribute("book", book);
return "addBook";
}
发表:
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addBookPost(@ModelAttribute("book") Book book, HttpServletRequest request) {
System.out.println(book.getTitle());
bookService.save(book);
MultipartFile bookImage = book.getBookImage();
System.out.println(book);
try {
byte[] bytes = bookImage.getBytes();
String name = book.getId() + ".png";
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(new File("src/main/resources/static/image/book/" + name)));
stream.write(bytes);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:bookList";
}
错误跟踪:
java.lang.NullPointerException
com.adminportal.service.impl.BookServiceImpl.save(BookServiceImpl.java:18)
com.adminportal.controller.BookController.addBookPost(BookController.java:40)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
由于我没有从表单中获取任何数据,这就是为什么该对象无法保存在DB中。如何将表单数据绑定到控制器?我已经尝试了所有的解决方案,我现在无法弄清楚我错在哪里,我错过了什么。请帮助!
提前致谢
答案 0 :(得分:1)
从控制器部分删除@ModelAttribute。确保jsp上的path属性与模型bean的属性匹配(即Book)。
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addBookPost(Book book, BindingResult result, ModelMap model) {
答案 1 :(得分:0)
答案 2 :(得分:0)
确保确实在Book对象中定义了setter。因为提交JSP时,详细信息通过设置器被映射到Java Book对象中。