Страница истекла проблема с кнопкой "Назад" и калиткой SortableDataProvider и DataTable - PullRequest
2 голосов
/ 06 мая 2010

У меня проблема с SortableDataProvider и DataTable в калитке.

Я определил свой DataTable следующим образом:

IColumn<Column>[] columns = new IColumn[9];

//column values are mapped to the private attributes listed in ColumnImpl.java
columns[0] =  new PropertyColumn<Column>(new Model<String>("#"), "columnPosition", "columnPosition");  

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

Добавление его в таблицу:

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);
    }
};

Мой провайдер данных:

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

private List<Column> list = null;

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

public ColumnSortableDataProvider(List<Column> list, String sortProperty) {
    this.list = list;
    setSort(sortProperty, true);
}

@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;
}

Проблема заключается в следующем: - Я щелкаю заголовок столбца, чтобы отсортировать по этому столбцу. - Я перехожу на другую страницу - Я нажимаю Назад (или Вперед, если я делаю противоположный сценарий) - Срок действия страницы истек.

Было бы неплохо сгенерировать страницу, используя PageParameters, но мне как-то нужно перехватить событие сортировки, чтобы сделать это.

Любые указатели будут с благодарностью. Спасибо за тонну !!

1 Ответ

0 голосов
/ 06 мая 2010

Я не знаю с первого взгляда, что может быть причиной этого, но для диагностики вы можете включить ведение журнала отладки для org.apache.wicket.Session или, возможно, большего количества кода калитки.

Поиск страницы определенно включает вызовы метода

public final Page getPage(final String pageMapName, final String path, final int versionNumber)

в этом классе, и у него есть некоторая запись отладки.

Для получения справки по настройке этого журнала, посмотрите на Как правильно инициализировать log4j? или на документы для log4j .

...