需要使用Wicket对列表进行排序

时间:2014-08-18 10:40:53

标签: list sorting wicket comparable

我正在制作一个非常简单的程序,看起来像这样:

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一起工作..

感谢您的帮助:)

1 个答案:

答案 0 :(得分:3)

您需要的是DataView组件,它提供排序所需的所有支持(以及稍后需要时的分页)。

这是一个有效的example,如果您单击右上角的“源代码”链接,您可以看到您想要从可排序表中开展的大部分工作都是开箱即用的。您所需要的只是创建一个合适的数据提供者。

如果您将DataViewSortableDataProvider一起使用,则无需担心编写自己的动态Comparator。 (这本身并不是一项非常艰巨的任务,但很容易弄错。)