【问题标题】:Page expired issue with back button and wicket SortableDataProvider and DataTable返回按钮和检票口 SortableDataProvider 和 DataTable 的页面过期问题
【发布时间】:2010-08-11 23:56:07
【问题描述】:

我在检票口中遇到了 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 生成页面会很好,但我需要拦截排序事件才能这样做。

任何指针将不胜感激。非常感谢!

【问题讨论】:

  • 如果您将所有行缩进四个空格或将其全部包装在代码标签中,代码将在这里布局得更好。

标签: datatable wicket


【解决方案1】:

我不知道是什么原因造成的,但为了帮助诊断,您可能需要为org.apache.wicket.Session 或更多检票口代码启用调试日志记录。

页面的检索肯定涉及对方法的调用

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

在这个类中,它有一些调试日志。

有关设置此日志记录的帮助,请查看How to initialize log4j properly?log4j 的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2020-05-12
    • 2013-03-30
    相关资源
    最近更新 更多