java - Spring 表单未将数据填充到模型对象

标签 java hibernate spring-mvc model

我的模型对象有一个“CtlgEntry”属性,该属性有一个属性“yearPublished”。必须填充表单,但会引发以下错误:

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.csu.library.mvc.dto.CatalogueEntry.yearPublished] with root cause
java.lang.IllegalArgumentException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:707)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:371)
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4463)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:276)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:756)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:748)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:744)
    at com.csu.library.mvc.dao.generic.GenericHibernateDao.save(GenericHibernateDao.java:73)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy54.save(Unknown Source)
    at com.csu.library.mvc.service.impl.CatalogueEntryServiceImpl.addItem(CatalogueEntryServiceImpl.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy55.addItem(Unknown Source)
    at com.csu.library.mvc.controller.CatalogueEntryController.addCatalogueEntry(CatalogueEntryController.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:827)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)

其他数据已加载到对象上,但只有yearPublished 抛出错误。以下是填充 CatalogueEntry 项的 jsp 表单代码:

<form:form method="POST" action="addCatalogueEntry" commandName="catalogueEntry">
        <table>
          <tr>
            <td><form:label path="title">Title Of Book:</form:label></td>
            <td><form:input path="title"/></td>
          </tr>
          <tr>
            <td><form:label path="yearPublished">Year Published:</form:label></td>
            <td><form:input path="yearPublished"/></td>
          </tr>
          <tr>
            <td><form:label path="isbn">ISBN Number:</form:label></td>
            <td><form:input path="isbn"/></td>
          </tr>
          <tr>
            <td><form:label path="publisher">Publisher:</form:label></td>
            <td><form:input path="publisher"/></td>
          </tr>
          <tr>
            <td><form:label path="countryOfPublication">Country Of Publication</form:label></td>
            <td><form:input path="countryOfPublication"/></td>
          </tr>
          <tr>
            <td><form:label path="authors">Authors</form:label></td>
            <td><form:input path="authors"/></td>
          </tr>

          <!--<c:forEach items="$catalogueEntry.authorList" var="author" varStatus="status">
            <tr>
                <td>First Name</td>
                <td><input name="authorList[${status.index}].firstName" id="authorList[${status.index}].firstName"/></td>
                <%--
                    <td><form:input path="personList[${i.index}].name" id="name${i.index}" /></td>
                    <td><form:input path="personList[${i.index}].age" id="age${i.index}" /></td>
                 --%>

            </tr>
            <tr>
                <td>Last Name</td>
                <td><input name="authorList[${status.index}].lastName" id="authorList[${status.index}].lastName"/></td>
            </tr>
          </c:forEach>
          -->
          <tr>
            <td><input type="submit" value="CLEAR" /></td>
            <td><input type="submit" value="SUBMIT" /></td>
          </tr>
        </table>
    </form:form>

该字段的 getter 和 setter 是:

private Integer yearPublished;

@Column(name="year_published")
@NotNull
public Integer getYearPublished() {
    return yearPublished;
}

public void setYearPublished(int yearPublished) {
    this.yearPublished = yearPublished;
}

最佳答案

使用非基本包装类型(例如,Integer 表示 intFloat 表示 float)。

关于java - Spring 表单未将数据填充到模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083338/

相关文章:

java - 执行器 - 如果安全性被禁用,则仅提供状态信息

java - 在执行文件操作时在 java 应用程序中打开太多文件描述符

java - Solr 和 postgresql 集成

java - 有没有办法通过 AuditQuery 识别哪些属性已被修改?

java - 在类与方法上定义@Transactional有什么区别

java - 绑定(bind)到 ScrollPane ScrollBar 时奇怪的 ScrollBar 行为

java - 按升序递增一组唯一数字

java - JPA 在 Spring 中到底是如何工作的?一些疑问

java - Hibernate session 未创建

java - 如何在 Spring 中将 Java 日期和时间戳值插入 mysql 数据库