繁体   English   中英

ModelAttribute object 字段是 controller 中的 null

[英]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.NullPointerExceptioncom.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM