0

感谢您的关注,我遇到了一个我无法解决的奇怪问题。我已经构建了一个 DataTable,其中 wicket 映射了来自 mongoDB 的内容。我也在使用 Tomcat7 和 Eclipse

但是,每次我选择要排序的列时,数据提供者的迭代器方法中的 getSort() 方法总是返回与默认值相同的值。

public SortableGalaxyDataProvider() {

    setSort("name", SortOrder.ASCENDING);
}

@Override
public Iterator<? extends Galaxy> iterator(long first, long count) {

    SortParam<String> sort = getSort(); //is always the same

我的页面的初始化是这样完成的

[编辑] 我使用 Spring 进行注入,所以在 GalaxyTable 页面中我有。

@Inject
SortableGalaxyDataProvider galaxyProvider;

public GalaxyTable() {

    List<IColumn<Galaxy, String>> columns = new ArrayList<IColumn<Galaxy, String>>();

    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Name"),"name","name"));
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Type"),"type","type"));
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Ancestors"),"ancestors","ancestors"));
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Radius"),"radius","radius"));


    add(new DefaultDataTable<Galaxy, String>("galaxies", columns, galaxyProvider, 10));
}

这是用于表格的 html 行

<wicket:extend>
<table cellspacing="0" wicket:id="galaxies">[table]</table>
</wicket:extend>

我找了很多例子,似乎没有人遇到同样的问题,初始显示是正常的,我可以浏览内容但是它永远不会排序,因为排序状态没有改变。

有什么线索吗?

谢谢

4

2 回答 2

1

我认为您的问题可能是由使用 SpringBean 引起的。它的工作方式,我认为在注入点中有一个自动生成的代理,因此,当 Wicket 尝试使用自省设置排序状态时,它会在代理中执行(或无法执行)。可能发生的另一件事是 Spring 在两个 ajax 请求之间重新创建 GalaxyProvider bean,排序状态也会丢失。

我会尝试摆脱代码中的注入,看看它会做什么。

于 2013-04-10T06:53:21.107 回答
0

解决 Spring 注入问题的一种方法:

将 DAO 注入页面并在数据提供者的构造函数中使用它是可行的。

    @Inject
    //SortableGalaxyDataProvider galaxyProvider;
    UniversDAO dao;

    public GalaxyTable() {

        List<IColumn<Galaxy, String>> columns = new ArrayList<IColumn<Galaxy, String>>();

        columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Name"),"name","name"));
        columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Type"),"type","type"));
        columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Ancestors"),"ancestors","ancestors"));
        columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Radius"),"radius","radius"));


        //add(new DefaultDataTable<Galaxy, String>("galaxies", columns, galaxyProvider, 10));
        add(new DefaultDataTable<Galaxy, String>("galaxies", columns, new SortableGalaxyDataProvider(dao), 10));
    }

但是我更希望它与常规的弹簧注射一起使用。正如塞德里克所说,问题可能出在这个包装弹簧上。

于 2013-04-10T13:29:14.607 回答