我正在尝试为动态zk列表框(mysql表)渲染器构建最小可接受的解决方案。我有基本的功能:给定一个表名,zk列表框将正确呈现列和行 - 该部分工作正常。
但是,在排序时我会得到" [Ljava.lang.String;无法转换为java.lang.Comparable"。
请注意,这仅适用于 me ,以了解zk的内部管道并充当简单的演示器。对我而言,最好的"解决方案是最简单和最短的。但是,我不知道自己不知道什么。
这是我的table.zul文件:
<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.anclad.DynamicColumnModel')"
>
<label value="Select Table: " />
<combobox id="table_list" model="@load(vm.getTableList())" autodrop="true" />
<button id="loadTableButton" label="Load Table" />
<label value="Currently Selected Table: " />
<label value="@bind(vm.tableName)" />
<listbox
id="inboxGrid"
itemRenderer="com.anclad.DynamicListitemRenderer"
height="800px"
mold="paging" pageSize="100"
hflex="1" vflex="true"
model="@load(vm.getTableData())"
>
<listhead
menupopup="auto"
>
<listheader
forEach="${vm.columnList}"
label="${each}"
sort="auto"
></listheader>
</listhead>
</listbox>
</div>
</zk>
这是我的DynamicColumnModel.java:
package com.anclad;
import java.util.ArrayList;
import java.util.*;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelExt;
import org.zkoss.zul.event.ListDataListener;
import java.sql.*;
import org.zkoss.bind.annotation.Init;
public class DynamicColumnModel implements ListModelExt, ListModel
{
private SchemaConnector sc = new SchemaConnector();
private List<String> columnList = new ArrayList<String>();
private TableConnector tc = new TableConnector();
@Init
public void init()
{
columnList = tc.getColumnList();
}
public List<String> getColumnList()
{
return columnList;
}
public void setColumnList(List<String> columnList)
{
this.columnList = columnList;
}
public String getTableName ()
{
return tc.getTableName();
}
public List<String> getTableList()
{
List<String> list = sc.getList();
return list;
}
public ArrayList<String[]> getTableData()
{
return tc.getList();
}
public void sort(Comparator cmpr, boolean ascending)
{
//do the real sorting...
//notify the listbox (or grid) that data is changed by use of ListDataEvent...
System.out.println("entered sort");
//would actually like to send the sort column name back to let the db do the sort...
}
public String getSortDirection (Comparator cmpr)
{
System.out.println("entered getSortDirection");
return null;
}
public void removeListDataListener(ListDataListener l)
{
System.out.println("entered removeListDataListenter");
}
public void addListDataListener(ListDataListener l)
{
System.out.println("entered addListDataListener");
}
public int getSize()
{
System.out.println("entered getSize");
return 33;
}
public String[] getElementAt(int index)
{
System.out.println("entered getElementAt");
return null;
}
}
我也有一个DynamicListitemRenderer类,除非必要,否则我不想在此发布。但是,我并不认为它与我的排序异常相关。
SchemaConnector和TableConnector类封装了mysql / jdbc逻辑:第一个返回一个表列表,后者返回数据(&#34; select * from ....&#34;)
显然,接口方法是存根,但据我所知,代码没有那么远。
只是想知道那里的人是否可以告诉我下一步是什么。我只希望默认的列表框排序功能正常工作。理想情况下,我想让数据库查询进行排序,所以我需要通过堆栈(不知何故)将列名称传回来,但就目前而言,任何推动我前进的解决方案都很好。