1. SmartClient Version: v10.0p_2014-09-29/LGPL Development Only (built 2014-09-29)
2. Browser : FF 24.7 ESR
Our application has hundreds of possible columns for a list grid and they may change dynamically. Adding a grid column, filtering by that column and then removing the column causes the error below. I have included a sample front end and Spring controller. To reproduce the issue, click on the 'Update Columns' button, filter the 'Description' column, and then click the 'Refresh' button. This issue began when we upgraded to SmartGWT 5.
Here is a sample app
And a sample Spring controller
2. Browser : FF 24.7 ESR
Our application has hundreds of possible columns for a list grid and they may change dynamically. Adding a grid column, filtering by that column and then removing the column causes the error below. I have included a sample front end and Spring controller. To reproduce the issue, click on the 'Update Columns' button, filter the 'Description' column, and then click the 'Refresh' button. This issue began when we upgraded to SmartGWT 5.
Code:
11:38:53.415:MUP6:WARN:Log:com.google.gwt.core.client.JavaScriptException: (TypeError): _4 is null
fileName: http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js
stack: isc_ListGrid_storeUpdatedEditorValue@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js:1995
isc_ListGrid_setFields@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js:1090
isc_c_Class_invokeSuper@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:255
isc_c_Class_Super@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:247
isc_RecordEditor_setFields@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js:2943
isc_ListGrid_setFields@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js:1101
isc_Canvas_setDataSource@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:3021
isc_c_Class_invokeSuper@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:255
isc_c_Class_Super@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:247
isc_ListGrid_setDataSource@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js:1146
isc_Class_setProperties@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:310
isc_Class_setProperty@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:309
CE@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:768
vE@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1014
bG@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1521
ggb@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1640
fZ@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1634
ae@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1554
Qd@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1500
Jp@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:526
Kp@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1628
dF/f<@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1527
Wc@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:722
Zc@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1499
Yc/<@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1230
dF/d.click@http://star.unival.com:8080/smart-gwt-0/main/762F2B54E0685682C784F007AEC1B75B.cache.html:1527
isc_StatefulCanvas_handleActivate@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Foundation.js:210
isc_StatefulCanvas_handleClick@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Foundation.js:211
isc_c_EventHandler_bubbleEvent@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:1510
isc_c_EventHandler_handleClick@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:1371
isc_c_EventHandler__handleMouseUp@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:1356
isc_c_EventHandler_handleMouseUp@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:1347
isc_c_EventHandler_dispatch@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:1585
anonymous@http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Core.js:55
lineNumber: 1995
columnNumber: 225
11:38:53.442:MUP6[E0]:WARN:Log:Uncaught JavaScript exception: TypeError: _4 is null in http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js, line 1995
11:38:53.600:TMR4:WARN:Log:TypeError: _4 is null
Stack from error.stack:
ListGrid.storeUpdatedEditorValue() @ main/sc/modules/ISC_Grids.js:1995
ListGrid.getEditValues() @ main/sc/modules/ISC_Grids.js:1883
ListGrid.getEditedRecord() @ main/sc/modules/ISC_Grids.js:1886
GridBody._updateEditItems() @ main/sc/modules/ISC_Grids.js:760
GridBody.redraw() @ main/sc/modules/ISC_Grids.js:751
[c]Canvas.clearRedrawQueue() @ main/sc/modules/ISC_Core.js:2837
[c]Class.fireCallback() @ main/sc/modules/ISC_Core.js:264
Timer._fireTimeout() @ main/sc/modules/ISC_Core.js:1237
Timer.setTimeout/_6<() @ main/sc/modules/ISC_Core.js:1235
11:38:53.601:TMR4:WARN:Log:Uncaught JavaScript exception: TypeError: _4 is null in http://star.unival.com:8080/smart-gwt-0/main/sc/modules/ISC_Grids.js, line 1995Here is a sample app
Code:
public class Main implements EntryPoint {
@Override
public void onModuleLoad() {
final List<DataSourceField> dsFields = new ArrayList<DataSourceField>(){{
add(new DataSourceIntegerField("id", "Id"){{setPrimaryKey(true);}});
add(new DataSourceTextField("name", "Name"));
}};
final List<ListGridField> lgFields = new ArrayList<ListGridField>(){{
add(new ListGridField("id", "Id"));
add(new ListGridField("name", "Name"));
}};
final List<DataSourceField> dsFields1 = new ArrayList<DataSourceField>(){{
add(new DataSourceIntegerField("id", "Id"){{setPrimaryKey(true);}});
add(new DataSourceTextField("name", "Name"));
add(new DataSourceTextField("description", "Description"));
}};
final List<ListGridField> lgFields1 = new ArrayList<ListGridField>(){{
add(new ListGridField("id"));
add(new ListGridField("name"));
add(new ListGridField("description"));
}};
final DataSource ds = new RestDataSource("service/items", null){{
setFields(dsFields.toArray(new DataSourceField[dsFields.size()]));
}};
final ListGrid grid = new ListGrid(){{
setFetchDelay(400);
setCanEdit(false);
setCanMultiSort(false);
setAutoFetchData(true);
setShowFilterEditor(true);
setFilterOnKeypress(true);
setDataProperties(new ResultSet(){{
setUseClientFiltering(false);
}});
setDataSource(ds);
setFields(lgFields.toArray(new ListGridField[lgFields.size()]));
}};
VLayout section = new VLayout(4);
section.setHeight100();
section.setWidth100();
section.addMember(grid);
section.addMember(new HLayout(4){{
addMember(new Button("Update Columns"){{
addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
grid.setDataSource(new RestDataSource("service/items", null){{
setFields(dsFields1.toArray(new DataSourceField[dsFields1.size()]));
}});
grid.setFields(lgFields1.toArray(new ListGridField[lgFields1.size()]));
grid.invalidateCache();
grid.fetchData();
}
});
}});
addMember(new Button("Refresh"){{
addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
grid.setDataSource(new RestDataSource("service/items", null){{
setFields(dsFields.toArray(new DataSourceField[dsFields.size()]));
}});
grid.setFields(lgFields.toArray(new ListGridField[lgFields.size()]));
grid.invalidateCache();
grid.fetchData();
}
});
}});
}});
section.show();
}
}Code:
@Controller
public class RestController {
@JsonAutoDetect
private static class Item{
@JsonProperty
int id;
@JsonProperty
String name;
@JsonProperty
String description;
public Item(int id, String name, String description){
this.id = id;
this.name = name;
this.description = description;
}
}
private static List<Item> items = new ArrayList<Item>();
static{
for(int i = 0; i <= 10; i++){
Item item = new Item(i, "Name" + i, "Desc" + i);
items.add(i, item);
}
}
@RequestMapping(value="/items")
@ResponseBody
public Response<Item> items(@RequestBody MappedRequest request){
return new Response<Item>(items, 0, 10, 10);
}
@ExceptionHandler
public void onException(Exception exception){
exception.printStackTrace();
}
}