Page expired issue with back button and wicket SortableDataProvider and DataTable

Posted by David on Stack Overflow See other posts from Stack Overflow or by David
Published on 2010-05-05T23:28:47Z Indexed on 2010/05/05 23:38 UTC
Read the original article Hit count: 495

Filed under:
|

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

© Stack Overflow or respective owner

Related posts about wicket

Related posts about datatable