我正在尝试使用他们的ListDataProvider排序示例作为参考对GWT中的列进行排序
http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting
问题是我可以看到我的表列数据正在排序(通过使用调试器),但表永远不会刷新。查看上面链接中的示例,它们不会显式刷新显示。我在这里错过了什么吗?
感谢。
答案 0 :(得分:7)
我的经验是,在创建ListDataProvider时,排序处理程序(即ListHandler)对List很敏感。
所以我建议不要删除或设置ListDataProvider的新列表(当然我认为在创建时它应该至少有一个空(非空)列表。)
只需使用ListDataProvider.getList()
并在其上完成工作。
例如,要删除所有当前行并设置新数据,只需拨打ListDataProvider.getList().clear()
然后再调用ListDataProvider.getList().addAll(yourNewData);
不要打电话给setList()
,否则排序就会失效。
答案 1 :(得分:3)
这两个例子毫无用处且令人困惑。
在说明如何使用单元格/网格表时,使用ListHandlers和DataProviders也没什么用处。
这些示例模糊并隐藏了GWT Cell / Grid表的一个简单特征 - 每次数据发生变化时,您只需要将列表替换并提供给表。
使用ListHandlers,Async处理程序和DataProviders的示例通过抛出一大堆蓬松无益的抽象优雅,使一个相当简单的过程复杂化。基本上这些抽象和可怕的结构本身会将记录推送到表格列表中。不要注意使用定时器。
也可以通过它的牛角来获取表格列表并自己动手 - 这样简单得多。我不记得我是怎么做的,因为我没有我的代码。
您需要做的是保留记录列表的缓冲区副本。这是要在表格中显示的记录列表。
无论您是在执行异步还是其他操作都无关紧要 - 您希望对该缓冲区副本进行任何更改。您的GWT-RPC应该更新该缓冲区。
当表请求升序排序时,比较器/过滤器将生成缓冲列表的升序副本,以使用setRowData替换表中的数据。同样,当表请求降序或专门过滤时。
如果您希望让它为您管理分页,则使用DataProvider非常有用。自己处理GWT-RPC要简单得多。 DataProvider应该通过请求服务器向其发送根据表的愿望排序/过滤的新列表来处理对您的排序和过滤。除非您有超过10页的记录,否则为什么要让服务器管理您的过滤/排序来消耗网络流量。
因此,对于一个简单的50记录实验示例,请自行管理缓冲区列表。