这是我的代码:
SortablePlayerDataProvider dp = new SortablePlayerDataProvider();
final DataView<Player> dataView = new DataView<Player>("rows", dp, 10) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final Item<Player> listItem) {
final Player player = listItem.getModelObject();
listItem.setModel(new CompoundPropertyModel<Player>(player));
listItem.add(new Label("name", player.getName()));
listItem.add(new Label("surname", player.getSurname()));
listItem.add(new Label("club", player.getClub()));
}
};
和提供者:
public class SortablePlayerDataProvider extends SortableDataProvider<Player> {
private static final long serialVersionUID = 1L;
public SortablePlayerDataProvider() {
setSort("surname", SortOrder.ASCENDING);
}
@Override
public Iterator<Player> iterator(int first, int count) {
return tournamentService.getAllPlayer().subList(first, first + count).iterator();
}
@Override
public int size() {
return tournamentService.getAllPlayer().size();
}
@Override
public IModel<Player> model(final Player object) {
return new LoadableDetachableModel<Player>() {
private static final long serialVersionUID = 1L;
@Override
protected Player load() {
return object;
}
};
}
}
但排序不起作用,我不知道为什么。怎么了 ?是否有人选择如何调试它?
更新:
有人可以解释我并显示这个dataProvider在哪里排序项目吗?
因为当我打印它时:
Iterator<Player> a = dp.iterator(0, dp.size());
for (Iterator<Player> iterator = a; iterator.hasNext();) {
System.out.println(iterator.next());
}
项仍然没有排序,当我寻找这个提供程序的实现时,我无法找到这个迭代器的排序。
答案 0 :(得分:0)
我已经看到上面例子的代码了。也许你可能需要使用组件OrderByBorder
更新
数据排序应该由您的数据源执行,SortableDataProvider不会自己执行。如果查看示例代码,可以看到它使用ContactsDatabase作为数据源。该类保留两个排序列表,一个用于“名称”,另一个用于“姓氏”属性。
答案 1 :(得分:0)
好的,我发现它为什么不起作用。在wicket示例中,项目在您定义迭代器时进行排序:
return getContactsDB().find(first, count, getSort()).iterator();
但我不明白为什么我需要对项目进行排序。然后,当我创建迭代器时,我可以创建一个简单的新IDataProvider排序项,它也是排序的。这堂课真的很模糊......