Выражение в h: значение selectOneMenu вызывает запись вместо чтения? - PullRequest
0 голосов
/ 28 июля 2011

У меня есть следующий код JSF (/ Seam):

<ui:define name="breadcrumb">
  <!-- h:form only supports HTTP POST, so I need a regular HTML form for the HTTP GET -->
  <form method="get" enctype="application/x-www-form-urlencoded">
    <h:selectOneMenu value="#{groupHome.instance.round}" id="round" onchange="this.form.submit();">
      <s:selectItems value="#{parallelGroupListQuery.resultList}"
                     var="round"
                     label="Season #{round.season.startYear}/#{(round.season.startYear + 1).toString().substring(2)}"
                     noSelectionLabel="Select Season"
                     hideNoSelectionLabel="true" />
      <f:converter converterId="roundEntityConverter" />
    </h:selectOneMenu>
    ...
  </form>
</ui:define>

Приведенное выше изменение изменяет текущий раунд (по одному за сезон) при выборе выпадающего элемента, но по какой-либо причине в выражении h:selectOneMenu value="#{groupHome.instance.round}" вызывается setRound () вместо getRound () (строка 17, см. трассировку стека ниже). Это реализует текущий выбор выпадающего списка.

Вышеуказанное приводит к следующей трассировке стека:

27.07.2011 22:42:27 javax.faces.component.UIInput updateModel
SCHWERWIEGEND: /league-home.xhtml @17,102 value="#{groupHome.instance.round}": Error writing 'round' on type com.kawoolutions.bbstats.model.Group
java.lang.NullPointerException
  at com.kawoolutions.bbstats.model.Group.setRound(Group.java:109)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at javax.el.BeanELResolver.setValue(BeanELResolver.java:108)
  at javax.el.CompositeELResolver.setValue(CompositeELResolver.java:69)
  at com.sun.faces.el.FacesCompositeELResolver.setValue(FacesCompositeELResolver.java:100)
  at org.jboss.el.parser.AstPropertySuffix.setValue(AstPropertySuffix.java:73)
  at org.jboss.el.parser.AstValue.setValue(AstValue.java:84)
  at org.jboss.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:249)
  at com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:93)
  at javax.faces.component.UIInput.updateModel(UIInput.java:771)
  at javax.faces.component.UIInput.processUpdates(UIInput.java:703)
  at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1081)
  at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1081)
  at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1081)
  at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1081)
  at org.ajax4jsf.component.AjaxViewRoot$2.invokeContextCallback(AjaxViewRoot.java:424)
  at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:240)
  at org.ajax4jsf.component.AjaxViewRoot.processUpdates(AjaxViewRoot.java:440)
  at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
  at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
  at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
  at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
  at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
  at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  at java.lang.Thread.run(Unknown Source)
27.07.2011 22:42:27 org.hibernate.util.JDBCExceptionReporter logExceptions
WARNUNG: SQL Error: 1048, SQLState: 23000
27.07.2011 22:42:27 org.hibernate.util.JDBCExceptionReporter logExceptions
SCHWERWIEGEND: Column 'round_id' cannot be null
27.07.2011 22:42:27 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SCHWERWIEGEND: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
  at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
  at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
  at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
  at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
  at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
  at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
  at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
  at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
  at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
  at org.jboss.seam.transaction.EntityTransaction.commit(EntityTransaction.java:110)
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:612)
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:603)
  at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:344)
  at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:244)
  at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:195)
  at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
  at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
  at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
  at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
  at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
  at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Column 'round_id' cannot be null
  at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2020)
  at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
  at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
  at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
  ... 36 more
27.07.2011 22:42:27 org.jboss.seam.jsf.SeamPhaseListener afterPhase
WARNUNG: uncaught exception, passing to exception handler
java.lang.IllegalStateException: Could not commit transaction
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:624)
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:603)
  at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:344)
  at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:244)
  at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:195)
  at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
  at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
  at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
  at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
  at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
  at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.RollbackException: Error while committing the transaction
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
  at org.jboss.seam.transaction.EntityTransaction.commit(EntityTransaction.java:110)
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:612)
  ... 26 more
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:81)
  ... 28 more
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
  at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
  at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
  at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
  at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
  at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
  at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
  at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
  at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
  at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
  ... 28 more
Caused by: java.sql.BatchUpdateException: Column 'round_id' cannot be null
  at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2020)
  at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
  at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
  at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
  ... 36 more
27.07.2011 22:42:27 org.jboss.seam.exception.Exceptions handle
SCHWERWIEGEND: handled and logged exception
java.lang.IllegalStateException: Could not commit transaction
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:624)
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:603)
  at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:344)
  at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:244)
  at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:195)
  at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
  at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
  at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
  at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
  at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
  at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.RollbackException: Error while committing the transaction
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
  at org.jboss.seam.transaction.EntityTransaction.commit(EntityTransaction.java:110)
  at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:612)
  ... 26 more
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:81)
  ... 28 more
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
  at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
  at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
  at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
  at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
  at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
  at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
  at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
  at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
  at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
  at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
  ... 28 more
Caused by: java.sql.BatchUpdateException: Column 'round_id' cannot be null
  at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2020)
  at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
  at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
  at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
  ... 36 more
27.07.2011 22:42:27 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=null[severity=(INFO 0), summary=(Fallback error handler: ), detail=(Fallback error handler: )]

Кто-нибудь знает, что не так?

...