Expired page with back button and wicket SortableDataProvider and DataTable

I have a problem with SortableDataProvider and DataTable in the gate.

I have defined my DataTable as such:

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

      

Adding it to the table:

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

      

My data provider:

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

      

The problem is this: - I click a column header to sort by that column. - I go to another page - I press "Back" (or "Forward" if I do the opposite scenario) - The page has expired.

It would be nice to generate the page using PageParameters, but somehow I need to intercept the sort event for that.

Any pointers would be greatly appreciated. Thanks a ton!

+2


a source to share


1 answer


I don't know what might be causing this, but in order to help diagnose, you can enable debug logging for org.apache.wicket.Session

or possibly more from the gate.

The page search definitely includes method calls

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

      



in this class, and it has several debugging protocols.

Help with setting up this logging, have a look at How to initialize log4j correctly? or in the docs for log4j .

0


a source







All Articles