wicket DataTable getSort状态不会改变

时间:2013-04-09 09:05:44

标签: dependency-injection wicket

谢谢你的关注,我有这个奇怪的问题,我无法解决。我已经使用wicket构建了一个DataTable,映射了来自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>

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

有任何线索吗?

由于

2 个答案:

答案 0 :(得分:1)

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

我会尝试在代码中删除注入并查看它的作用。

答案 1 :(得分: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));
    }

然而,我更喜欢使用常规弹簧注射。正如塞德里克所说,这个问题可能就是这个包裹弹簧。