View Full Version : JSON in ComboBox
niemayd
20 Jan 2009, 7:39 AM
Hello everybody,
i am trying to load a JSON encoded string into a combo box and i am trying to figure out how all that store <-> reader <-> loader stuff works (is there any useful and easy tutorial?). But i am not very successful :-( Does anybody see my mistake???
If there's needs for a working peace of code, just ask...
I am always getting that error:
java.lang.ClassCastException: com.extjs.gxt.ui.client.data.BaseListLoader cannot be cast to com.extjs.gxt.ui.client.data.PagingLoaderAnd that's my code:
//should init comboboc
ComboBox<ModelData> combo = new ComboBox<ModelData>();
combo.setDisplayField("name");
combo.setFieldLabel("Rolle");
combo.setStore(loadRolesFromServer());
//load files
private ListStore<ModelData> loadRolesFromServer(){
try{
String test = "{'roles':{'total':1,'role'[{'name':'Ein Name','wert':'Ein Wert'}]}}";
MemoryProxy proxy = new MemoryProxy(test);
ModelType type = new ModelType();
type.root = "roles";
type.totalName = "total";
type.recordName = "role";
type.addField("name");
type.addField("wert");
JsonReader jsonReader = new JsonReader(type);
BaseListLoader loader = new BaseListLoader(proxy, jsonReader);
ListStore<ModelData> store = new ListStore<ModelData>(loader);
return store;
}
catch(Exception e){
Window.alert(e.getMessage());
return null;
}
}
kolli
20 Jan 2009, 11:39 AM
thats because the combobox uses PagingLoader rather than the regular BaseListLoader. So the exception.
niemayd
22 Jan 2009, 2:26 AM
But when i use PagingLoader there is another exception:
java.lang.RuntimeException: java.lang.ClassCastException: com.google.gwt.json.client.JSONArray cannot be cast to com.google.gwt.json.client.JSONObject
at com.extjs.gxt.ui.client.store.ListStore.onLoadException(ListStore.java:480)
at com.extjs.gxt.ui.client.store.ListStore$1.loaderLoadException(ListStore.java:135)
at com.extjs.gxt.ui.client.event.LoadListener.handleEvent(LoadListener.java:27)
at com.extjs.gxt.ui.client.event.LoadListener.handleEvent(LoadListener.java:1)
at com.extjs.gxt.ui.client.event.BaseObservable.fireEvent(BaseObservable.java:74)
at com.extjs.gxt.ui.client.data.BaseLoader.onLoadFailure(BaseLoader.java:155)
at com.extjs.gxt.ui.client.data.BaseLoader$1.onFailure(BaseLoader.java:115)
at com.extjs.gxt.ui.client.data.MemoryProxy.load(MemoryProxy.java:50)
at com.extjs.gxt.ui.client.data.BaseLoader.loadData(BaseLoader.java:126)
at com.extjs.gxt.ui.client.data.BaseLoader.load(BaseLoader.java:90)
at com.extjs.gxt.ui.client.widget.form.ComboBox.doQuery(ComboBox.java:305)
at com.extjs.gxt.ui.client.widget.form.ComboBox.onTriggerClick(ComboBox.java:1332)
at com.extjs.gxt.ui.client.widget.form.ComboBox$4.onDown(ComboBox.java:1077)
at com.extjs.gxt.ui.client.util.KeyNav.handleEvent(KeyNav.java:161)
at com.extjs.gxt.ui.client.util.KeyNav.handleEvent(KeyNav.java:1)
at com.extjs.gxt.ui.client.event.BaseObservable.fireEvent(BaseObservable.java:74)
at com.extjs.gxt.ui.client.widget.Component.fireEvent(Component.java:427)
at com.extjs.gxt.ui.client.widget.Component.onBrowserEvent(Component.java:669)
at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308)
at com.google.gwt.user.client.DOM.dispatchEventAndCatch(DOM.java:1287)
at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1255)
at sun.reflect.GeneratedMethodAccessor28.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.ie.IDispatchImpl.callMethod(IDispatchImpl.java:126)
at com.google.gwt.dev.shell.ie.IDispatchProxy.invoke(IDispatchProxy.java:155)
at com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke(IDispatchImpl.java:294)
at com.google.gwt.dev.shell.ie.IDispatchImpl.method6(IDispatchImpl.java:194)
at org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:117)
at org.eclipse.swt.internal.ole.win32.COM.VtblCall(Native Method)
at org.eclipse.swt.internal.ole.win32.IOleInPlaceActiveObject.TranslateAccelerator(IOleInPlaceActiveObject.java:22)
at org.eclipse.swt.ole.win32.OleFrame.translateOleAccelerator(OleFrame.java:734)
at org.eclipse.swt.ole.win32.OleFrame.getMsgProc(OleFrame.java:210)
at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:2389)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2963)
at com.google.gwt.dev.GWTShell.pumpEventLoop(GWTShell.java:720)
at com.google.gwt.dev.GWTShell.run(GWTShell.java:593)
at com.google.gwt.dev.GWTShell.main(GWTShell.java:357)
niemayd
3 Feb 2009, 7:31 AM
Okay,
found the errors :-)
1. Here's the code that loads JSON:
private ListStore<ModelData> loadRolesFromServer(){
try{
String url = "http://localhost/test/request.php";
ScriptTagProxy<Object, ListLoadResult<ModelData>> proxy = new ScriptTagProxy<Object, ListLoadResult<ModelData>>(url);
ModelType type = new ModelType();
type.root = "names";
type.totalName = "count";
type.addField("name", "name");
type.addField("lastname", "lastname");
JsonReader<ListLoadConfig> reader = new JsonReader<ListLoadConfig>(type);
BaseListLoader loader = new BaseListLoader(proxy, reader);
ListStore<ModelData> store = new ListStore<ModelData>(loader);
return store;
}
catch(Exception e){
Window.alert(e.getMessage());
return null;
}
}2. If you are loading your JSON from the server you have to add the callBackID to the returned JSON value. Use FireBug to see what is send back when playing with the examples.
eluneg
21 Jan 2010, 7:07 AM
This code works fine
ComboBox<ModelData> combo = new ComboBox<ModelData>();
combo.setDisplayField("name");
String test = "{'roles':[{'name':'Ein Name','wert':'Ein Wert'}]}";
MemoryProxy proxy = new MemoryProxy(test);
ModelType type = new ModelType();
type.setRoot("roles");
type.addField("name");
type.addField("wert");
JsonReader jsonReader = new JsonReader(type);
BaseListLoader loader = new BaseListLoader(proxy, jsonReader);
ListStore<ModelData> store = new ListStore<ModelData>(loader);
combo.setStore(store);
loader.load();
portlet.add(combo);
OBELIX
7 Feb 2010, 8:44 AM
Hi,
I have the same problem : I receive JSON datas in a JavaScriptObject because of the Same Origine Policy.
I can read my JSON data manually but I don't know how put my JavaScriptObject in a grid.
Could you help me ?
Here is a part of my code :
public void handleJSON(JavaScriptObject obj) {
JsArray<CAData> Ca = asArrayOfCAData(obj);
for (int i = 0; i < Ca.length(); i++) {
CAData theCa = Ca.get(i);
MessageBox.alert("JSON",theCa.getsymbol(),null);
}
}
I don't know how to put the "theCa.getsymbol()" in a grid.
Thanks,
JB
Powered by vBulletin® Version 4.1.5 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.