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

しかし、並べ替えは機能し、その理由はわかりません。なにが問題ですか ?それをデバッグする方法はいくつかありますか?

アップデート:

誰かが私に説明して、この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をデータソースとして使用していることがわかります。このクラスは、2つのソートされたリストを保持します。1つは「name」プロパティ用で、もう1つは「lastname」プロパティ用です。

于 2012-09-11T10:39:06.220 に答える
0

わかりました、なぜうまくいかないのかわかりました。ウィケットの例では、イテレータを定義するとアイテムがソートされます:

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

しかし、なぜアイテムをソートする必要があるのか​​ わかりません。次に、イテレータを作成しているときに簡単な新しい IDataProvider ソート項目を作成でき、それもソートされます。このクラスは本当に曖昧です...

于 2012-09-11T14:40:24.513 に答える