You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

A Simple Sortable DataTable Example

by Adam Koch

DataTablePage.java
package com.adamkoch.learning.wicket;

import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;

public class DataTablePage extends WebPage {
    
    public DataTablePage() {
        final UserProvider userProvider = new UserProvider();
        
        IColumn[] columns = new IColumn[2];
        columns[0] = new PropertyColumn(new StringResourceModel("firstNameTableHeaderLabel", this, null), "name.first", "name.first");
        columns[1] = new PropertyColumn(new Model("Last Name"), "name.last", "name.last");
        
        DefaultDataTable table = new DefaultDataTable("datatable", columns, userProvider, 10);
        
        add(table);
    }

}
UserProvider.java
package com.adamkoch.learning.wicket;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

public class UserProvider extends SortableDataProvider {

    List list = new ArrayList();

    public UserProvider() {
        // important or you'll get a null pointer on line 40
        setSort("name.first", true);

        list.add(new Contact(new Name("Abby", "Zerind")));
        list.add(new Contact(new Name("Bernard", "Youst")));
        list.add(new Contact(new Name("Charlie", "Xerg")));
        list.add(new Contact(new Name("Deitri", "West")));
        list.add(new Contact(new Name("Ernie", "Vuntang")));
        list.add(new Contact(new Name("Frank", "Unter")));
    }

    public Iterator iterator(int first, int count) {
        List newList = new ArrayList();
        newList.addAll(list.subList(first, first + count));

        final String sortColumn = this.getSort().getProperty();
        final boolean ascending = this.getSort().isAscending();

        Collections.sort(newList, new Comparator() {

            public int compare(Object obj1, Object obj2) {
                PropertyModel model1 = new PropertyModel(obj1, sortColumn);
                PropertyModel model2 = new PropertyModel(obj2, sortColumn);

                Object modelObject1 = model1.getObject();
                Object modelObject2 = model2.getObject();

                int compare = ((Comparable) modelObject1).compareTo(modelObject2);

                if (!ascending)
                    compare *= -1;

                return compare;
            }
        });

        return newList.iterator();
    }

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

    public IModel model(final Object object) {
        return new AbstractReadOnlyModel() {
            public Object getObject() {
                return object;
            }
        };
    }

}

class Contact {

    private final Name name;

    public Contact(Name name) {
        this.name = name;
    }

    public Name getName() {
        return name;
    }
}

class Name {

    private String firstName;
    private String lastName;

    public Name(String fName, String lName) {
        firstName = fName;
        lastName = lName;
    }

    public String getFirst() {
        return firstName;
    }

    public void setFirst(String firstName) {
        this.firstName = firstName;
    }

    public String getLast() {
        return lastName;
    }

    public void setLast(String lastName) {
        this.lastName = lastName;
    }
}
DataTablePage.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>DataTable Example</title>
</head>

<body>
<table wicket:id="datatable"></table>
</body>
</html>
DataTablePage.properties
firstNameTableHeaderLabel=First Name

I'm not a Wicket developer or expert. Use at your own rick. If you find problems with this example, please edit this page.

  • No labels