如何为具有对象列表作为字段的对象显示Wicket DataTable或列表视图行项目
这是我试图显示的表,对于ObjA中的每个辅助,它都显示一个ObjB列表 我想使用Wicket DataTable或Listview显示可排序的数据。我使用了SortableData提供程序,它适用于简单的对象,如如何为具有对象列表作为字段的对象显示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
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;
}