-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hello
I got an issue with the sort="auto" in my grid.
I saw some similar topics but i did not really understand.
Types.zul
<style>tr.z-row td.z-row-inner { padding: 5px }</style> <grid id="typeGrid"> <columns menupopup="auto"> <column sort="auto">Id</column> <column sort="auto">Name</column> <column sort="auto">Long Name</column> </columns> </grid> <zscript><![CDATA[ import contributor.contributorTypes; import renderer.rendererTypes; //Simply create a new ListModelList instance with data typeGrid.setModel( new ListModelList(new contributorTypes().getTypes()) ); //Specify the renderer to render the data of row typeGrid.setRowRenderer(new rendererTypes()); ]]></zscript>
My renderer :
String[] types = (String[]) data; row.appendChild(new Label( types[0].toString() )); row.appendChild(new Label( types[1].toString() )); row.appendChild(new Label( types[2].toString() ));
My contributor
public List<String[]> getTypes() { List<String[]> retour=null; USASDB db = new USASDB(); List<Type> lt = db.getTypes(); if (lt!=null) { retour = new ArrayList<String[]>(); for (int i = 0 ; i < lt.size() ; i++) { retour.add(new String[]{ String.valueOf(lt.get(i).getId()) , lt.get(i).getName() , lt.get(i).getLongName()}); } return retour; } else return null; }
and the issue i got :
Jan 24, 2012 8:06:33 PM org.zkoss.zk.ui.impl.UiEngineImpl handleError:1256
SEVERE: >>java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.Comparable
>> at org.zkoss.zul.RowComparator.compare(RowComparator.java:175)
>> at java.util.Arrays.mergeSort(Unknown Source)
>> at java.util.Arrays.mergeSort(Unknown Source)
>> at java.util.Arrays.sort(Unknown Source)
>> at java.util.Collections.sort(Unknown Source)
>> at org.zkoss.zul.ListModelList.sort(ListModelList.java:391)
>> at org.zkoss.zul.Column.doSort(Column.java:383)
>> at org.zkoss.zul.Column.sort(Column.java:359)
>> at org.zkoss.zul.Column.onSort(Column.java:587)
>> 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 org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:205)
>> at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
>> at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1612)
>> at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1396)
>> at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1109)
>> at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:569)
>> at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:463)
>> at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:471)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
>> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
>> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
>> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
>> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
>> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
>> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
>> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
>> at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
>> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>> at java.lang.Thread.run(Unknown Source)
Could you please help me ?
i am using String and List<String> everywhere.
thanks a lot
Nicolas
First of all, your model does not really reflect the grid definition.
You grid has three columns, then your base model should be something more complex than a list/array of strings.
Instead of strings, you would need, e.g. beans with three properties or - more generic - a Map with at least three entries.
So your base model should be something like List<Bean> or Bean[] or List<Map> or Map[].
Hope this helps.
Hello
thanks, but i'm new at this and i don;t really get it.
I update my model with that
public List<Map<Integer , String>> getTypes2() { List<Map<Integer , String>> retour=null; Map<Integer , String> temp = new HashMap<Integer, String>(); USASDB db = new USASDB(); List<Type> lt = db.getTypes(); if (lt!=null) { retour = new ArrayList<Map<Integer , String>>(); for (int i = 0 ; i < lt.size() ; i++) { temp.put( 0 , String.valueOf(lt.get(i).getId()) ); temp.put( 1 , lt.get(i).getName()); temp.put( 2 , lt.get(i).getLongName()); retour.add ( new HashMap<Integer, String>(temp)); } return retour; } else return null; }
but i still have this issue :
Jan 25, 2012 12:44:56 PM org.zkoss.zk.ui.impl.UiEngineImpl handleError:1256
SEVERE: >>java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.Comparable
>> at org.zkoss.zul.RowComparator.compare(RowComparator.java:175)
Any idea ?
thanks
Nicolas
Give your map keys real names (e.g. "id", "name", "longName") and try with
<column sort="auto(id)">Id</column>
Note: I never used sorting with grid, only with listbox. There it works.
Asked: 2012-01-25 01:18:24 +0800
Seen: 331 times
Last updated: Jan 25 '12