如何为具有对象列表作为字段的对象显示Wicket DataTable或列表视图行项目

如何为具有对象列表作为字段的对象显示Wicket DataTable或列表视图行项目,wicket,Wicket,这是我试图显示的表,对于ObjA中的每个辅助,它都显示一个ObjB列表 我想使用Wicket DataTable或Listview显示可排序的数据。我使用了SortableData提供程序,它适用于简单的对象,如 AID BID count1 count2 AID1 1 3 4 2 4 5 3 4 2 AID2 4 6 10 5 2 4

这是我试图显示的表,对于ObjA中的每个辅助,它都显示一个ObjB列表

我想使用Wicket DataTable或Listview显示可排序的数据。我使用了SortableData提供程序,它适用于简单的对象,如

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{
int a;
String b;
}
ObjA{
长期援助;
列出清单;
}
@马戈米 感谢您的回复。这是代码和相应的Html文件。我使用的是数据表。 我不知道如何为每个援助呈现表中listObjBs(bID、count、count2)中的项目。 在ObjA中为listobjb添加列的正确方法是什么

ObjA{
Long aId;
List<ObjB> listObjB;
}
***columns.add(新属性列(“B ID”)的型号,“ObjBCounts.bID”,
“ObjBCounts.BID”);
添加(新属性列(Model.of(“Count”),“objBCounts.Count”);
columns.add(新属性列(Model.of(“Count2”),“objBCounts.Count2”);***
如何在迭代器方法中对列bID进行排序

***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"));*** 
公共类主页扩展网页
私有静态列表listObjBs=Arrays.asList(
新ObjB(15L,2,5),
新ObjB(12L,7,10),
新ObjB(13L,3,5),
新的ObjB(10L,6,5));
私有静态列表联系人=数组。asList(
新ObjA(1L,列表OBJBS),
新ObjA(2L,列表OBJBS),
新ObjA(3L,列表OBJBS),
新ObjA(4L,listObjBs));
公共主页(最终页面参数){
列表列=新的ArrayList();
columns.add(新属性column(Model.of(“A ID”),“aID”,
"援助";;
公共课主页扩展网页
私有静态列表listObjBs=Arrays.asList(
新ObjB(15L,2,5),
新ObjB(12L,7,10),
新ObjB(13L,3,5),
新的ObjB(10L,6,5));
私有静态列表联系人=数组。asList(
新ObjA(1L,列表OBJBS),
新ObjA(2L,列表OBJBS),
新ObjA(3L,列表OBJBS),
新ObjA(4L,listObjBs));
公共主页(最终页面参数){
列表列=新的ArrayList();
columns.add(新属性column(Model.of(“A ID”),“aID”,
"援助";;
columns.add(新属性column(Model.of(“B ID”),“ObjBCounts.bID”,
“ObjBCounts.BID”);
添加(新属性列(Model.of(“Count”),“objBCounts.Count”);
添加(新的PropertyColumn(Model.of(“Count2”),“objBCounts.Count2”);
添加(新的DefaultDataTable(“联系人”),列,
新联系人Provider(),10));
}
rivate静态类ContactsProvider扩展了SortableDataProvider{
公共联系人提供者(){
设置排序(“辅助”,排序器升序);
}

公共迭代器我不太确定,但看起来您正在以一种不可能的方式将ObjA和ObjB混合到一个表中。您是否希望显示ObjA表(至少这由第一列指示)?还是希望显示ObjB表(由第二列和第三列指示)

只要一个表由一个列表支持,就不能将另一个列表混入该表中

在我看来,您有以下选择:

  • 您可以有一个ObjA表,在一个表单元格中,您可以有一个包含ObjB表的面板。但是没有对所有ObjA的所有ObjB行进行排序
  • 您可以定义某种类型的DTO,该DTO的对象混合了ObjA和ObjB。类似于:

    类数据(){ 内奥贾伊德; int-objBId; int count1; int count2; ... }

  • 您可以使用标准的重复视图,并在自己的数据提供程序中实现排序


  • 我已经编辑了上面的问题来给你提供更多的信息。谢谢。援助投标计数2援助1 3 4 2 4 5 3 4 2援助2 4 6 10 5 2 4 6 4 6援助3 7 4 5 8 9 4以上是我试图实现的。这是我的每一个援助投标清单和它们的计数。你能解释一下如何完成你建议的选项1吗。再次感谢!
    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;
    }