Hi, I've got an issue with SortableDataProvider and DataTable in wicket.
I've 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(new Model("#"), "columnPosition", "columnPosition");  
columns[1] =  new PropertyColumn(new Model("Description"), "description"); 
   columns[2] =  new PropertyColumn(new Model("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 list = null;
public ColumnSortableDataProvider(Table table, String sortProperty) {
  this.list = Arrays.asList(table.getColumns().toArray(new Column[0]));
  setSort(sortProperty, true);
 }
public ColumnSortableDataProvider(List list, String sortProperty) {
  this.list = list;
  setSort(sortProperty, true);
 }
@Override
 public Iterator 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 iterator = null;
try {
   if(getSort() != null) {
    Collections.sort(list, new Comparator() {
     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 the following: 
- I click a column header to sort by that column.
- I navigate to a different page
- I click Back (or Forward if I do the opposite scenario)
- Page has expired.
It'd be nice to generate the page using PageParameters but I somehow need to intercept the sort event to do so.  
Any pointers would be greatly appreciated.  Thanks a ton!!
David