谢谢你的关注,我有这个奇怪的问题,我无法解决。我已经使用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>
我找了很多例子,似乎没有人遇到同样的问题,初始显示是正常的,我可以浏览内容,但它永远不会被排序,因为排序状态不会改变。
有任何线索吗?
由于
答案 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));
}
然而,我更喜欢使用常规弹簧注射。正如塞德里克所说,这个问题可能就是这个包裹弹簧。