0

我遵循这个例子:http ://www.wicket-library.com/wicket-examples/repeater/wicket/bookmarkable/org.apache.wicket.examples.repeater.SortingPage?0

这是我的代码:

    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;
            }
        };
    }
}

但排序不起作用,我不知道为什么。怎么了 ?是否有 som optins 如何调试它?

更新:

有人可以解释一下并显示这个 dataProvider 排序项目在哪里吗?

因为当我打印它时:

    Iterator<Player> a = dp.iterator(0, dp.size());
    for (Iterator<Player> iterator = a; iterator.hasNext();) {
        System.out.println(iterator.next());
    }

项目仍然没有排序,当我寻找这个提供者的实现时,我找不到这个迭代器在哪里排序。

4

2 回答 2

0

我已经看到了上面示例的代码。也许您可能需要使用组件 OrderByBorder

更新

数据排序应该由您的数据源执行,SortableDataProvider 不会自己执行。如果您查看示例代码,您会发现它使用 ContactsDatabase 作为数据源。此类保留两个排序列表,一个用于“名称”,一个用于“姓氏”属性。

于 2012-09-11T10:39:06.220 回答
0

好的,我发现它为什么不起作用。在 wicket 示例中,当您定义迭代器时,项目正在排序:

     return getContactsDB().find(first, count, getSort()).iterator();

但我不明白为什么我需要对项目进行排序。然后我可以在创建迭代器时创建简单的新 IDataProvider 排序项,并且它也已排序。这门课真的很晦涩...

于 2012-09-11T14:40:24.513 回答