Hibernate Spring Object Wrapper没有传递值

时间:2015-08-25 12:28:06

标签: java spring hibernate jsp spring-mvc

我正在努力创建一个可以插入多个电表读数的表格。我构建了一个包含所有值的包装器。所有看起来都很好,直到我提交读数的那一刻,因为我得到了java.lang.NullPointerException。

这是控制器的一部分:

@RequestMapping("/registerEnergyReadings")
public ModelAndView registerEnergyReadings(
        @ModelAttribute("energyReadingWrapper") EnergyReadingWrapper, energyReadingWrapper, BindingResult result) {
    // loading available meters from DB:
    List<EnergyMeters> energyMeters= meterService.getMeters();
    List<EnergyReading> readings= new ArrayList<EnergyReading>();
    //preparing the wrapper           
    for (int i = 0; i < energyMeters.size(); i++) {
        EnergyReading reading = new EnergyReading();
        reading.setMeter(energyMeters.get(i));
    //the two lines below done temporary so I don't have to fill the form every time   
    // I test it now
        reading.setReading(23);
        reading.setDate(new Date());
        readings.add(reading);
    }
    energyReadingWrapper.setEnergyReadings(readings);
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("energyReadingWrapper", energyReadingWrapper);

    return new ModelAndView("RegisterEnergyReadings", "model", model);
}

@RequestMapping("/saveEnergyReadings")
public ModelAndView saveEnergyReadings( @ModelAttribute("energyReadingWrapper") EnergyReadingWrapper energyReadingWrapper, BindingResult result) {
    System.out.println("this is the point I reach before the null exception");
    System.out.println(energyReadingWrapper.toString());
    List<EnergyReadings> readings= energyReadingWrapper.getEnergyReadings();
    for (EnergyReadingsi : readings) {
        readingService.saveReading(i);
    }

    return new ModelAndView("redirect:/readingList.html");
}

jsp形式(它的关键部分):

<c:url var="readings" value="saveEnergyReadings.html" />
<form:form id="energyReadingWrapper"
    modelAttribute="energyReadingWrapper" method="post"
    action="${readings}">
    <table width="400px" height="150px">
        <c:forEach items="${energyReadingWrapper.energyReadings}"
            varStatus="i" var="energyReadings">
            <tr>
                <td><c:out value="${energyReadings.meter.description}" /></td>

                <td><form:input
                        path="energyReadings[${i.index}].readingValue" /></td>
                <td><form:input path="energyReadings[${i.index}].date"
                        type="date" /></td>
            </tr>
        </c:forEach>
        <tr>
            <td colspan="6" align="center"><input type="submit"
                value="Save" /></td>
    </table>
</form:form>

一切看起来都很好。 jsp页面生成的表格中包含与米数匹配的行,并且它们都具有我设置的默认值(23和当前日期) 我不明白为什么当我按下保存按钮时包装器没有被传递给控制器​​。 我错过了什么?

此致 马切伊

编辑: 堆栈跟踪(不幸的是我用波兰语编写程序):

  

输入例外报告

     

消息请求处理失败;嵌套异常是   显示java.lang.NullPointerException

     

description服务器遇到阻止它的内部错误   完成此请求。

     

例外

     

org.springframework.web.util.NestedServletException:Request   处理失败;嵌套异常是java.lang.NullPointerException     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)   根本原因

     

显示java.lang.NullPointerException     forms.OdczytEnergiaFormularz.toString(OdczytEnergiaFormularz.java:20)     kamienica.controller.HomeController.zapiszOdczytEnergia(HomeController.java:511)     sun.reflect.NativeMethodAccessorImpl.invoke0(原生方法)     sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)     sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)     java.lang.reflect.Method.invoke(未知来源)     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

这是包装类:

public class EnergyReadingWrapper{

    private List<EnergyReading> energyReadings;

(setters and getters)
}

0 个答案:

没有答案