0

Grid and String comparable

asked 2012-01-25 01:18:24 +0800

satan87 gravatar image satan87
255

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

delete flag offensive retag edit

4 Replies

Sort by ยป oldest newest

answered 2012-01-25 08:30:59 +0800

Matze2 gravatar image Matze2
773 7

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.

link publish delete flag offensive edit

answered 2012-01-25 17:47:11 +0800

satan87 gravatar image satan87
255

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

link publish delete flag offensive edit

answered 2012-01-25 19:48:18 +0800

Matze2 gravatar image Matze2
773 7

updated 2012-01-25 19:48:36 +0800

Give your map keys real names (e.g. "id", "name", "longName") and try with

<column sort="auto(id)">Id</column>

and so on.

Note: I never used sorting with grid, only with listbox. There it works.

link publish delete flag offensive edit

answered 2012-01-25 20:07:58 +0800

satan87 gravatar image satan87
255

It's working perfectly !!!
thanks a lot

link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2012-01-25 01:18:24 +0800

Seen: 331 times

Last updated: Jan 25 '12

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More