-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hello,
i would like to create 3 combobox, each combobox's list being linked to an another one.
At this moment, i have a simple zul file with :
<combobox id="cbRefType" model="@load(vm.allReferenceTypes)" selectedItem="@bind(vm.refTypeSelected)"> <template name="model" var="itemRefT"> <comboitem label="@load(itemRefT.typeTranslated)" ></comboitem> </template> </combobox> <combobox id="cbAircraft" model="@load(vm.allAircrafts)" selectedItem="@bind(vm.aircraftSelected)"> <template name="model" var="itemAir"> <comboitem label="@load(itemAir.name)" ></comboitem> </template> </combobox> <combobox id="cbManual" model="@load(vm.allManuals)" selectedItem="@bind(vm.manualSelected)" visible="@load((vm.refTypeSelected != null))"> <template name="model" var="itemMan"> <comboitem label="@load(itemMan.type)" ></comboitem> </template> </combobox>
In view model (managed as a Spring bean), i have a property for each combo which represent the List<T> to get, and a property for the selected item.
I tried to "play" on getter & setter in order to load the next combo when a selection is done.
@Component("referencesListVm") @Scope("prototype") public class ReferencesList { // Services @Autowired private ReferenceTypeService referenceTypeService; @Autowired private AircraftService aircraftService; @Autowired private ManualService manualService; // Attributes of VM List<ReferenceType> referenceTypes; ReferenceType refTypeSelected; List<Aircraft> aircrafts; Aircraft aircraftSelected; List<Manual> manuals; Manual manualSelected; // getter & setter public List<ReferenceType> getAllReferenceTypes() { if (referenceTypes == null) { referenceTypes = referenceTypeService.getAllReferenceTypes(); for (ReferenceType refType : referenceTypes) { refType.setTypeTranslated(Labels.getLabel(refType.getType())); } } return referenceTypes; } public ReferenceType getRefTypeSelected() { return refTypeSelected; } //@NotifyChange({"refTypeSelected", "aircraftSelected"}) public void setRefTypeSelected(ReferenceType refTypeSelected) { this.refTypeSelected = refTypeSelected; getAllAircrafts(); } public List<Aircraft> getAllAircrafts() { if (refTypeSelected != null) { aircrafts = aircraftService.getAllAircrafts(refTypeSelected.getId()); } return aircrafts; } public Aircraft getAircraftSelected() { return aircraftSelected; } //@NotifyChange({"aircraftSelected", "manualSelected"}) public void setAircraftSelected(Aircraft aircraftSelected) { this.aircraftSelected = aircraftSelected; getAllManuals(); } public List<Manual> getAllManuals() { if (refTypeSelected != null && "dbref.reference.type.ref".equalsIgnoreCase(refTypeSelected.getType()) && aircraftSelected != null) { manuals = manualService.getAllManuals(aircraftSelected.getId()); } return manuals; } public Manual getManualSelected() { return manualSelected; } //@NotifyChange("manualSelected") public void setManualSelected(Manual manualSelected) { this.manualSelected = manualSelected; } .. }
I put @not in comment cause i don't understand how it's working...
I presume that is an interest if i call the setter manually in order to update the property in client side.
Anyway, i tried a simple case : in the setter of the first combo, i set the property and call the getter for the list of the next combo.
My service calls a DAO (JPA/Hibernate implementation).
The exception generated is not very clear for me.
Is the pb in the update of the property to client side ?
Is the pb the link with my service (which is working in junit tests) ?
Can someone provide to me some advice about these linked object, and how to manage it properly ?
Thank you.
The Exception:
GRAVE: Error writing 'refTypeSelected' on type myprog.test.webapp.viewmodel.ReferencesList org.zkoss.zel.ELException: Error writing 'refTypeSelected' on type myprog.test..webapp.viewmodel.ReferencesList at org.zkoss.zel.BeanELResolver.setValue(BeanELResolver.java:176) at org.zkoss.zel.CompositeELResolver.setValue(CompositeELResolver.java:83) at org.zkoss.zel.CompositeELResolver.setValue(CompositeELResolver.java:83) at org.zkoss.xel.zel.XelELResolver.setValue(XelELResolver.java:114) at org.zkoss.bind.xel.zel.BindELResolver.setValue(BindELResolver.java:102) at org.zkoss.zel.impl.parser.AstValue.setValue(AstValue.java:248) at org.zkoss.zel.impl.ValueExpressionImpl.setValue(ValueExpressionImpl.java:256) at org.zkoss.xel.zel.ELXelExpression.setValue(ELXelExpression.java:50) at org.zkoss.bind.impl.BindEvaluatorXImpl.setValue(BindEvaluatorXImpl.java:50) at org.zkoss.bind.impl.SavePropertyBindingImpl.save(SavePropertyBindingImpl.java:128) at org.zkoss.bind.impl.PropertyBindingHandler.doSaveBinding(PropertyBindingHandler.java:148) at org.zkoss.bind.impl.PropertyBindingHandler.doSaveEvent(PropertyBindingHandler.java:203) at org.zkoss.bind.impl.BinderImpl.doSaveEvent(BinderImpl.java:1388) at org.zkoss.bind.impl.BinderImpl.access$1300(BinderImpl.java:95) at org.zkoss.bind.impl.BinderImpl$CommandEventListener.onEvent0(BinderImpl.java:1128) at org.zkoss.bind.impl.BinderImpl$CommandEventListener.onEvent(BinderImpl.java:1101) at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2736) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2707) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2648) at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136) at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1709) at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1494) at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1204) at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:558) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:456) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:464) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.NullPointerException at oracle.sql.CharacterSet.make(CharacterSet.java:514) at oracle.jdbc.driver.DBConversion.init(DBConversion.java:169) at oracle.jdbc.driver.DBConversion.<init>(DBConversion.java:120) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1087) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1158) at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79) at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278) at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1363) at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:59) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.enlistInCurrentTransaction(ExtendedEntityManagerCreator.java:421) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.doJoinTransaction(ExtendedEntityManagerCreator.java:398) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:356) at $Proxy67.createNamedQuery(Unknown Source) at myprog.test.persistence.dao.impl.AircraftDaoImpl.findAllAircrafts(AircraftDaoImpl.java:34) at myprog.test.service.impl.AircraftServiceImpl.getAllAircrafts(AircraftServiceImpl.java:36) at myprog.test.service.impl.AircraftServiceImpl$$FastClassByCGLIB$$d5a7ff41.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689) 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.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622) at myprog.test.service.impl.AircraftServiceImpl$$EnhancerByCGLIB$$afd45a71.getAllAircrafts(<generated>) at myprog.test.webapp.viewmodel.ReferencesList.getAllAircrafts(ReferencesList.java:92) at myprog.test.webapp.viewmodel.ReferencesList.setRefTypeSelected(ReferencesList.java:83) 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.zkoss.zel.BeanELResolver.setValue(BeanELResolver.java:171) ... 41 more 19 août 2012 00:52:00 org.zkoss.zk.ui.impl.UiEngineImpl handleError:1351 GRAVE: >>org.zkoss.zel.ELException: Error writing 'refTypeSelected' on type myprog.test..webapp.viewmodel.ReferencesList >>java.lang.NullPointerException >> at oracle.sql.CharacterSet.make(CharacterSet.java:514) >> at oracle.jdbc.driver.DBConversion.init(DBConversion.java:169) >> at oracle.jdbc.driver.DBConversion.<init>(DBConversion.java:120) >> at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1087) >> at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308) >> at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536) >> at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228) >> at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) >> at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) >> at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) >> at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) >> at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1158) >> at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79) >> at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) >> at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) >> at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) >> at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278) >> at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) >> at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) >> at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) >> at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) >> at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1363) >> at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:59) >> at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.enlistInCurrentTransaction(ExtendedEntityManagerCreator.java:421) >> at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.doJoinTransaction(ExtendedEntityManagerCreator.java:398) >> at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:356) >> at $Proxy67.createNamedQuery(Unknown Source) >> at myprog.test.persistence.dao.impl.AircraftDaoImpl.findAllAircrafts(AircraftDaoImpl.java:34) >> at myprog.test.service.impl.AircraftServiceImpl.getAllAircrafts(AircraftServiceImpl.java:36) >> at myprog.test.service.impl.AircraftServiceImpl$$FastClassByCGLIB$$d5a7ff41.invoke(<generated>) >> at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) >> at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689) >> 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.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622) >> at myprog.test.service.impl.AircraftServiceImpl$$EnhancerByCGLIB$$afd45a71.getAllAircrafts(<generated>) >> at myprog.test.webapp.viewmodel.ReferencesList.getAllAircrafts(ReferencesList.java:92) >> at myprog.test.webapp.viewmodel.ReferencesList.setRefTypeSelected(ReferencesList.java:83) >> 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.zkoss.zel.BeanELResolver.setValue(BeanELResolver.java:171) >> at org.zkoss.zel.CompositeELResolver.setValue(CompositeELResolver.java:83) >> at org.zkoss.zel.CompositeELResolver.setValue(CompositeELResolver.java:83) >> at org.zkoss.xel.zel.XelELResolver.setValue(XelELResolver.java:114) >> at org.zkoss.bind.xel.zel.BindELResolver.setValue(BindELResolver.java:102) >> at org.zkoss.zel.impl.parser.AstValue.setValue(AstValue.java:248) >> at org.zkoss.zel.impl.ValueExpressionImpl.setValue(ValueExpressionImpl.java:256) >> at org.zkoss.xel.zel.ELXelExpression.setValue(ELXelExpression.java:50) >> at org.zkoss.bind.impl.BindEvaluatorXImpl.setValue(BindEvaluatorXImpl.java:50) >> at org.zkoss.bind.impl.SavePropertyBindingImpl.save(SavePropertyBindingImpl.java:128) >> at org.zkoss.bind.impl.PropertyBindingHandler.doSaveBinding(PropertyBindingHandler.java:148) >> at org.zkoss.bind.impl.PropertyBindingHandler.doSaveEvent(PropertyBindingHandler.java:203) >> at org.zkoss.bind.impl.BinderImpl.doSaveEvent(BinderImpl.java:1388) >> at org.zkoss.bind.impl.BinderImpl.access$1300(BinderImpl.java:95) >> at org.zkoss.bind.impl.BinderImpl$CommandEventListener.onEvent0(BinderImpl.java:1128) >> at org.zkoss.bind.impl.BinderImpl$CommandEventListener.onEvent(BinderImpl.java:1101) >> at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2736) >> at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2707) >> at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2648) >> at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136) >> at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1709) >> at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1494) >> at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1204) >> at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:558) >> at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:456) >> at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:464) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) >> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) >> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) >> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) >> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) >> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) >> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) >> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) >> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) >> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879) >> at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) >> at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) >> at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) >> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) >> at java.lang.Thread.run(Thread.java:619)
Hi mkommer,
According to your error message, it seems not problem of ZK MVVM.
The problem should be this:
Caused by: java.lang.NullPointerException at oracle.sql.CharacterSet.make(CharacterSet.java:514) at oracle.jdbc.driver.DBConversion.init(DBConversion.java:169)
Regards,
Monty Pan
You have to instantiate 'refTypeSelected'. When this property is null, onSelect method can't write anything to null object
If you are looking something like this...One combobox will change then automatically next combobox change then use NotifyChange it will work for your issue.
thanks
Asked: 2012-08-18 23:19:41 +0800
Seen: 226 times
Last updated: Sep 14 '12