I think there is a bug when combining filtering on a listgrid and an onCellHover.
The minimal code (a showcase example):
If I change the continent filter (the selectItem) and QUICKLY move to a record, so that onCellHover is called before the filtering actually occurs, I get this exception:
The error occurs on event.getRecord(), so I think it is already null (because of the filter change) but it stills try to evaluate.
That's why this occurs:
java.lang.ClassCastException: com.smartgwt.client.data.Record cannot be cast to com.smartgwt.client.widgets.grid.ListGridRecord
at com.smartgwt.client.widgets.grid.events.GridRowColEvent.getRecord(GridRowColEvent.java)
at zedes2.client.Alternate.onCellHover(Alternate.java:104)
(on the stack)
Using SNAPSHOT_v8.3d_2012-07-30/EVAL Deployment, but I also observerd this on 3.0p EE.
The minimal code (a showcase example):
Code:
package zedes2.client; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.fields.DataSourceBooleanField; import com.smartgwt.client.data.fields.DataSourceDateField; import com.smartgwt.client.data.fields.DataSourceFloatField; import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.FieldType; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.CellHoverEvent; import com.smartgwt.client.widgets.grid.events.CellHoverHandler; public class Alternate implements EntryPoint, CellHoverHandler { public void onModuleLoad() { final ListGrid countryGrid = new ListGrid(); countryGrid.setWidth( 500 ); countryGrid.setHeight( 224 ); countryGrid.setShowAllRecords( false ); countryGrid.setDataSource( WorldDS.getInstance() ); countryGrid.setAutoFetchData( true ); countryGrid.setCanEdit( true ); countryGrid.setCanEdit( false ); countryGrid.setShowFilterEditor( true ); countryGrid.setFilterOnKeypress( true ); countryGrid.setCanHover( true ); // TODO: evtl nicht hier?? hier ist ja nur ein ListGrid countryGrid.addCellHoverHandler( this ); countryGrid.setHoverWidth( 50 ); countryGrid.setFetchDelay( 500 ); countryGrid.setDataPageSize( 20 ); countryGrid.draw(); } private static class WorldDS extends DataSource { // The DataSource would normally be defined external to any classes that use it. private static WorldDS instance = null; public static WorldDS getInstance() { if ( instance == null ) { instance = new WorldDS( "worldDS" ); } return instance; } public WorldDS( String id ) { setID(id); setRecordXPath("/List/country"); DataSourceIntegerField pkField = new DataSourceIntegerField("pk"); pkField.setHidden(true); pkField.setPrimaryKey(true); DataSourceTextField countryCodeField = new DataSourceTextField("countryCode", "Code"); countryCodeField.setRequired(true); DataSourceTextField countryNameField = new DataSourceTextField("countryName", "Country"); countryNameField.setRequired(true); DataSourceTextField capitalField = new DataSourceTextField("capital", "Capital"); DataSourceTextField governmentField = new DataSourceTextField("government", "Government", 500); DataSourceBooleanField memberG8Field = new DataSourceBooleanField("member_g8", "G8"); DataSourceTextField continentField = new DataSourceTextField("continent", "Continent"); continentField.setValueMap("Europe", "Asia", "North America", "Australia/Oceania", "South America", "Africa"); DataSourceDateField independenceField = new DataSourceDateField("independence", "Nationhood"); DataSourceFloatField areaField = new DataSourceFloatField("area", "Area (kmē)"); DataSourceIntegerField populationField = new DataSourceIntegerField("population", "Population"); DataSourceFloatField gdpField = new DataSourceFloatField("gdp", "GDP ($M)"); setFields(pkField, countryCodeField, countryNameField, capitalField, governmentField, memberG8Field, continentField, independenceField, areaField, populationField, gdpField); setDataURL("ds/world.data.xml"); setClientOnly(true); } } @Override public void onCellHover( CellHoverEvent event ) { ListGridRecord lg = event.getRecord(); System.out.println( lg.getAttribute( "countryName" ) ); } }
Code:
Uncaught JavaScript exception [TypeError: _1 is null] in http://127.0.0.1:8888/zedes2/sc/modules/ISC_Core.js, line 3366 com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129) at com.smartgwt.client.widgets.BaseWidget.fireEvent(BaseWidget.java:71) 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 com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337) at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218) at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at com.google.gwt.core.client.impl.Impl.apply(Impl.java) at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213) at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292) at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546) at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassCastException: com.smartgwt.client.data.Record cannot be cast to com.smartgwt.client.widgets.grid.ListGridRecord at com.smartgwt.client.widgets.grid.events.GridRowColEvent.getRecord(GridRowColEvent.java) at zedes2.client.Alternate.onCellHover(Alternate.java:104) at com.smartgwt.client.widgets.grid.events.CellHoverEvent.dispatch(CellHoverEvent.java:100) at com.smartgwt.client.widgets.grid.events.CellHoverEvent.dispatch(CellHoverEvent.java:1) at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1) at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40) at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193) at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88) at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127) at com.smartgwt.client.widgets.BaseWidget.fireEvent(BaseWidget.java:71) 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 com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337) at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218) at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at com.google.gwt.core.client.impl.Impl.apply(Impl.java) at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213) at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292) at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546) at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) at java.lang.Thread.run(Unknown Source)
Code:
18:30:58.324 [ERROR] [zedes2] 18:30:58.256:IFCS4:WARN:Log:TypeError: _1 is null Stack from error.stack: unnamed(isc_Canvas__getHoverPropertie) @ zedes2/sc/modules/ISC_Core.js:3366 unnamed(isc_GridRenderer__showHove) @ zedes2/sc/modules/ISC_Grids.js:830 unnamed(isc_GridRenderer__cellHove) @ zedes2/sc/modules/ISC_Grids.js:829 unnamed(isc_c_Hover__doActio) @ zedes2/sc/modules/ISC_Core.js:4309 unnamed(isc_c_Class_fireCallbac) @ zedes2/sc/modules/ISC_Core.js:339 unnamed(isc_c_Timer__fireTimeou) @ zedes2/sc/modules/ISC_Core.js:1440 unnamed() @ zedes2/sc/modules/ISC_Core.js:1435 unnamed() @ com.smartgwt.client.core.JsObject$SGWT_WARN: 18:30:58.256:IFCS4:WARN:Log:TypeError: _1 is null Stack from error.stack: unnamed(isc_Canvas__getHoverPropertie) @ zedes2/sc/modules/ISC_Core.js:3366 unnamed(isc_GridRenderer__showHove) @ zedes2/sc/modules/ISC_Grids.js:830 unnamed(isc_GridRenderer__cellHove) @ zedes2/sc/modules/ISC_Grids.js:829 unnamed(isc_c_Hover__doActio) @ zedes2/sc/modules/ISC_Core.js:4309 unnamed(isc_c_Class_fireCallbac) @ zedes2/sc/modules/ISC_Core.js:339 unnamed(isc_c_Timer__fireTimeou) @ zedes2/sc/modules/ISC_Core.js:1440 unnamed() @ zedes2/sc/modules/ISC_Core.js:1435 unnamed() @ at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292) at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546) at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) at java.lang.Thread.run(Unknown Source)
That's why this occurs:
java.lang.ClassCastException: com.smartgwt.client.data.Record cannot be cast to com.smartgwt.client.widgets.grid.ListGridRecord
at com.smartgwt.client.widgets.grid.events.GridRowColEvent.getRecord(GridRowColEvent.java)
at zedes2.client.Alternate.onCellHover(Alternate.java:104)
(on the stack)
Using SNAPSHOT_v8.3d_2012-07-30/EVAL Deployment, but I also observerd this on 3.0p EE.
Comment