我正在制作一个非常简单的程序,看起来像这样:
public class WicketApplication extends WebApplication implements Comparable<Object>{
private List<Person> persons = Arrays.asList(
new Person("Mikkel", "20-02-91", 60169803),
new Person("Jonas", "02-04-90", 86946512),
new Person("Steffen", "15-07-90", 12684358),
new Person("Rasmus", "08-12-93", 13842652),
new Person("Michael", "10-10-65", 97642851));
/**
* @see org.apache.wicket.Application#getHomePage()
*/
@Override
public Class<? extends WebPage> getHomePage() {
return SimpleView.class;
}
public static WicketApplication get() {
return (WicketApplication) Application.get();
}
/**
* @return @see org.apache.wicket.Application#init()
*/
public List<Person> getPersons() {
return persons;
}
public List<Person> getSortedList(){
return Collections.sort(persons);
//This won't work before implementing comparator i know, but how??
}
@Override
public void init() {
super.init();
// add your configuration here
}
@Override
public int compareTo(Object o) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
那是我把我的人员列入名单的班级。
public class SimpleView extends SimpleViewPage {
public SimpleView() {
ListView persons = new ListView("persons", getPersons()) {
@Override
protected void populateItem(ListItem item) {
Person person = (Person) item.getModelObject();
item.add(new Label("name", person.getName()));
item.add(new Label("birthdate", person.getBirthdate()));
item.add(new Label("phone", person.getPhone()));
}
};
add(persons);
add(new Label("size", "Number of people " + getPersons().size()));
}
}
这就是我对人民的所作所为。 基本上我希望程序显示包含所有数据的表(这已经有效)。 现在我希望能够对它们进行排序。但我不能为我的生活弄清楚。我仍然是编程的新手,我想在我的桌子下方有一个按钮,可以按名称,bday或电话号码排序。正在考虑尝试比较,但不能记得那么好,并且不确定它如何与Wicket一起工作..
感谢您的帮助:)
答案 0 :(得分:3)
您需要的是DataView
组件,它提供排序所需的所有支持(以及稍后需要时的分页)。
这是一个有效的example,如果您单击右上角的“源代码”链接,您可以看到您想要从可排序表中开展的大部分工作都是开箱即用的。您所需要的只是创建一个合适的数据提供者。
如果您将DataView
与SortableDataProvider一起使用,则无需担心编写自己的动态Comparator
。 (这本身并不是一项非常艰巨的任务,但很容易弄错。)