Как отобразить таблицу данных Wicket, отсортированную по определенному столбцу по умолчанию? - PullRequest
1 голос
/ 28 апреля 2010

У меня есть вопрос, касающийся данных Wicket. В настоящее время я использую DataTable для отображения нескольких столбцов данных.

Моя таблица настроена следующим образом:

DataTable<Column> dataTable = new DataTable<Column>("columnsTable", columns, provider, maxRowsPerPage) {
            @Override
            protected Item<Column> newRowItem(String id, int index, IModel<Column> model) {
                return new OddEvenItem<Column>(id, index, model);
            }
        };

Столбцы выглядят так:

columns[0] =  new PropertyColumn<Column>(new Model<String>("Description"), "description", "description");
columns[1] =  new PropertyColumn<Column>(new Model<String>("Logic"), "columnLogic");
columns[2] =  new PropertyColumn<Column>(new Model<String>("Type"), "dataType", "dataType");

Вот мой поставщик данных столбца:

public class ColumnSortableDataProvider extends SortableDataProvider<Column> {
private static final long serialVersionUID = 1L;

private List<Column> list = null;

public ColumnSortableDataProvider(Table table) {
    this.list = Arrays.asList(table.getColumns().toArray(new Column[0]));
}

public ColumnSortableDataProvider(List<Column> list) {
    this.list = list;
}

@Override
public Iterator<? extends Column> iterator(int first, int count) {
    /*
    first - first row of data
    count - minimum number of elements to retrieve
    So this method returns an iterator capable of iterating over {first, first+count} items
     */ 
    Iterator<Column> iterator = null;

    try {
        if(getSort() != null) {
            Collections.sort(list, new Comparator<Column>() {
                private static final long serialVersionUID = 1L;

                @Override
                public int compare(Column c1, Column c2) {
                    int result=1;
                    PropertyModel<Comparable> model1= new PropertyModel<Comparable>(c1, getSort().getProperty());
                    PropertyModel<Comparable> model2= new PropertyModel<Comparable>(c2, getSort().getProperty());

                    if(model1.getObject() == null && model2.getObject() == null) 
                        result = 0;
                    else if(model1.getObject() == null) 
                        result = 1;
                    else if(model2.getObject() == null) 
                        result = -1;
                    else 
                        result = ((Comparable)model1.getObject()).compareTo(model2.getObject());

                    result = getSort().isAscending() ? result : -result;

                    return result;
                }
            });
        }

        if (list.size() > (first+count))
            iterator = list.subList(first, first+count).iterator();
        else
            iterator = list.iterator();
    } 
    catch (Exception e) {
        e.printStackTrace();
    }

    return iterator;
}

Сортировка по щелчку по столбцу работает отлично, но я бы хотел, чтобы таблица по умолчанию сортировалась по столбцу Описание. Я в растерянности, чтобы сделать это. Если вам нужен другой код, пожалуйста, дайте мне знать.

Заранее спасибо !!! - Д

1 Ответ

5 голосов
/ 28 апреля 2010

Есть пара перегруженных setSort методов и setSortState метод в SortableDataProvider, которые можно вызвать для установки этого.

Пример кода с использованием setSort см. В источнике SortableContactDataProvider в примере Sorting DataView на этой странице examples .

...