1
我有一个关于Wicket的Datatable的问题。我目前使用DataTable来显示几列数据。如何显示Wicket Datatable,默认按特定列排序?
我的表被设置如下:
DataTable<Column> dataTable = new DataTable<Column>("columnsTable", columns, provider, maxRowsPerPage) {
@Override
protected Item<Column> newRowItem(String id, int index, IModel<Column> model) {
return new OddEvenItem<Column>(id, index, model);
}
};
列看起来像这样:
columns[0] = new PropertyColumn<Column>(new Model<String>("Description"), "description", "description");
columns[1] = new PropertyColumn<Column>(new Model<String>("Logic"), "columnLogic");
columns[2] = new PropertyColumn<Column>(new Model<String>("Type"), "dataType", "dataType");
这里是我的列数据提供:
public class ColumnSortableDataProvider extends SortableDataProvider<Column> {
private static final long serialVersionUID = 1L;
private List<Column> list = null;
public ColumnSortableDataProvider(Table table) {
this.list = Arrays.asList(table.getColumns().toArray(new Column[0]));
}
public ColumnSortableDataProvider(List<Column> list) {
this.list = list;
}
@Override
public Iterator<? extends Column> iterator(int first, int count) {
/*
first - first row of data
count - minimum number of elements to retrieve
So this method returns an iterator capable of iterating over {first, first+count} items
*/
Iterator<Column> iterator = null;
try {
if(getSort() != null) {
Collections.sort(list, new Comparator<Column>() {
private static final long serialVersionUID = 1L;
@Override
public int compare(Column c1, Column c2) {
int result=1;
PropertyModel<Comparable> model1= new PropertyModel<Comparable>(c1, getSort().getProperty());
PropertyModel<Comparable> model2= new PropertyModel<Comparable>(c2, getSort().getProperty());
if(model1.getObject() == null && model2.getObject() == null)
result = 0;
else if(model1.getObject() == null)
result = 1;
else if(model2.getObject() == null)
result = -1;
else
result = ((Comparable)model1.getObject()).compareTo(model2.getObject());
result = getSort().isAscending() ? result : -result;
return result;
}
});
}
if (list.size() > (first+count))
iterator = list.subList(first, first+count).iterator();
else
iterator = list.iterator();
}
catch (Exception e) {
e.printStackTrace();
}
return iterator;
}
通过点击排序列完美工作,但我希望表最初被排序,默认情况下,描述列。我无法做到这一点。如果您需要查看其他代码,请告诉我。
谢谢! - D
这工作完美。谢谢!!! – David 2010-04-29 17:12:13
不客气!很高兴我能帮上忙。 – 2010-04-29 21:57:42
嗨donroby @,我有另一个问题涉及到相同的代码。我已经在这里发布了,如果你有能力,你可以看看吗? 谢谢! http://stackoverflow.com/questions/2777448/page-expired-issue-with-back-button-and-wicket-sortabledataprovider-and-datatable – David 2010-05-05 23:30:15