0
AID      BID    count1  count2
AID1    1   3   4
            2   4   5
            3       4   2
AID2    4   6   10   
            5   2   4
            6   4   6
AID3    7   4   5
            8        9  4

これは、ObjA のすべての AID が ObjB のリストを表示する、表示しようとしているテーブルです。

Wicket DataTable または Listview を使用して、Sortable データを表示したいと考えています。SortableData Provider を使用しました。

ObjA{
int a;
String b;
}

しかし、以下に示すように、フィールドとしてオブジェクトのリストを持つオブジェクトがあります。

ObjA{
Long aId;
List<ObjB> listObjB;
}

@magomi ご回答ありがとうございます。これはコードと対応する Html ファイルです。私はデータテーブルを使用しています。すべての aID のテーブルで listObjBs (bID,count,count2) のアイテムをレンダリングする方法がわかりません。ObjA に listObjBs の列を追加する正しい方法は何ですか?

***columns.add(new PropertyColumn<ObjA>(Model.of("B ID"), "ObjBCounts.bID",
                "ObjBCounts.BID"));
        columns.add(new PropertyColumn<ObjA>(Model.of(" Count"), "objBCounts.count"));
        columns.add(new PropertyColumn<ObjA>(Model.of("Count2”),"objBCounts.count2"));*** 

iterator メソッドで列 bID をソートするにはどうすればよいですか?

Public class HomePage extends Webpage
private static List<ObjB> listObjBs = Arrays.asList(
            new ObjB(15L,2,5),
            new ObjB(12L,7,10),
            new ObjB(13L,3,5),
            new ObjB(10L,6,5));

    private static List<ObjA> contacts = Arrays.asList( 
            new ObjA(1L,listObjBs),
            new ObjA(2L,listObjBs),
            new ObjA(3L,listObjBs),
            new ObjA(4L,listObjBs));

    public HomePage(final PageParameters parameters) {
        List<IColumn<ObjA>> columns = new ArrayList<IColumn<ObjA>>();
        columns.add(new PropertyColumn<ObjA>(Model.of("A ID"), "aID",
                "aID"));

        Public class HomePage extends Webpage
private static List<ObjB> listObjBs = Arrays.asList(
            new ObjB(15L,2,5),
            new ObjB(12L,7,10),
            new ObjB(13L,3,5),
            new ObjB(10L,6,5));

    private static List<ObjA> contacts = Arrays.asList( 
            new ObjA(1L,listObjBs),
            new ObjA(2L,listObjBs),
            new ObjA(3L,listObjBs),
            new ObjA(4L,listObjBs));

    public HomePage(final PageParameters parameters) {
        List<IColumn<ObjA>> columns = new ArrayList<IColumn<ObjA>>();
        columns.add(new PropertyColumn<ObjA>(Model.of("A ID"), "aID",
                "aID"));

        columns.add(new PropertyColumn<ObjA>(Model.of("B ID"), "ObjBCounts.bID",
                "ObjBCounts.BID"));
        columns.add(new PropertyColumn<ObjA>(Model.of(" Count"), "objBCounts.count"));
        columns.add(new PropertyColumn<ObjA>(Model.of("Count2”),"objBCounts.count2"));

        add(new DefaultDataTable<ObjA>("contacts", columns,
                new ContactsProvider(), 10));
    }
rivate static class ContactsProvider extends SortableDataProvider<ObjA> {
    public ContactsProvider() {
        setSort("aID", SortOrder.ASCENDING);
    }

    public Iterator<? extends ObjA> iterator(int first, int count) {
        List<ObjA> data = new ArrayList<ObjA>(contacts);
        Collections.sort(data, new Comparator<ObjA>() {

            public int compare(ObjA o1, ObjA o2) {
                int dir = getSort().isAscending() ? 1 : -1;

                if ("bID".equals(getSort().getProperty())) {
                    return dir * (o1.listObjB.get(0).getBID().compareTo(o2.listObjB.get(0).getBID()));
                } else {

                    return dir * (o1.getAID().compareTo(o2.getAID()));
                }
            }
        });
        return data.subList(first, Math.min(first + count, data.size()))
                .iterator();
    }

    public int size() {
        return contacts.size();
    }

    public IModel<ObjA> model(ObjA object) {
        return Model.of(object);
    }

}






<html>
<body>
<table border ="1" cellspacing = "1" wicket:id="contacts" class="contacts"></table>
</body>
</html>


        add(new DefaultDataTable<ObjA>("contacts", columns,
                new ContactsProvider(), 10));
    }
rivate static class ContactsProvider extends SortableDataProvider<ObjA> {
    public ContactsProvider() {
        setSort("aID", SortOrder.ASCENDING);
    }

    public Iterator<? extends ObjA> iterator(int first, int count) {
        List<ObjA> data = new ArrayList<ObjA>(contacts);
        Collections.sort(data, new Comparator<ObjA>() {

            public int compare(ObjA o1, ObjA o2) {
                int dir = getSort().isAscending() ? 1 : -1;

                if ("bID".equals(getSort().getProperty())) {
                    return dir * (o1.listObjB.get(0).getBID().compareTo(o2.listObjB.get(0).getBID()));
                } else {

                    return dir * (o1.getAID().compareTo(o2.getAID()));
                }
            }
        });
        return data.subList(first, Math.min(first + count, data.size()))
                .iterator();
    }

    public int size() {
        return contacts.size();
    }

    public IModel<ObjA> model(ObjA object) {
        return Model.of(object);
    }

}






<html>
<body>
<table border ="1" cellspacing = "1" wicket:id="contacts" class="contacts"></table>
</body>
</html>




ObjB{
Long bId;
int  count;
int count2;
}

並べ替え可能なテーブルに objB のリストを含む ObjA からのデータを表示したいのですが、ウィケットのマークアップと列への入力方法を教えてください。

ありがとうございました。

4

1 に答える 1

0

よくわかりませんが、不可能な方法で ObjA と ObjB を 1 つのテーブルに混在させているようです。そうですか、ObjA のテーブルを表示しますか (少なくともこれは最初の列で示されます)。それとも、ObjB のテーブルを表示しますか (2 列目と 3 列目で示されています)。

テーブルが1 つのリストに基づいている限り、このテーブルに別のリストを混在させることはできません。

私の見解では、次のオプションがあります。

  1. ObjA のテーブルを持つことができ、テーブル セル内に ObjB のテーブルを持つパネルを持つことができます。ただし、すべての ObjA の ObjB のすべての行に対する並べ替えはありません。
  2. ObjA と ObjB から混合されたオブジェクトを持つある種の DTO を定義できます。このようなもの:

    class Data() { int objAId; int objBId; int count1; int count2; ... }

  3. 標準の繰り返しビューを使用して、並べ替えを独自のデータ プロバイダーに実装できます。

于 2012-04-22T14:44:36.700 に答える