[英]ModelAttribute object fields are null in the controller
当我提交表单时,modelAttribute 仍然是 null。 我寻找我的错误,但我被困在代码中的某个地方并寻求您的帮助......请检查下面的代码
Spring 版本 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>
controller:获取:
@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)
由于我没有从表单中获取任何数据,这就是为什么 object 不能保存在 DB 中的原因。 如何将表单数据绑定到 controller? 到目前为止,我已经尝试了所有解决方案,但我无法弄清楚我错在哪里,我错过了什么。 请帮助
提前致谢
从 controller 部件中删除 @ModelAttribute。 确保 jsp 上的路径属性与您的 model bean(即 Book)的属性匹配。
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addBookPost(Book book, BindingResult result, ModelMap model) {
你在这条线上有java.lang.NullPointerException : com.adminportal.service.impl.BookServiceImpl.save(BookServiceImpl.Z93F725A07423FE1C8489F448B33)D你可能发送空? It is better to use validation with BindingResult on attribute and check validation form http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/validation/BindingResult.html or you have com. adminportal.service.impl.BookServiceImpl = null
确保您确实在书籍 object 中定义了设置器。 因为在提交JSP时,细节通过setter映射到Java书object中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.