GWT - 分页在边缘情况下错误地添加和删除页面
GWT - Pagination adds and removes pages incorrectly at edge case scenarios
我有一个由 ListDataProvider 提供的带有分页的 CellTable。我将页面大小设置为 5,期望当 ListDataProvider 中的行数超过 5 的倍数时,页码会增加,反之亦然。我有添加和删除按钮,可用于添加和删除单元格行。
问题是分页以错误的 ListDataProvider 大小添加和删除页面。例如,由于页面大小为 5,我预计当我将第 6 行添加到 table 时,页面大小会增加。但是,当添加第 7 行而不是第 6 行时,页面大小会增加。
页面 未 增加第 6 个条目 -
页面增加了第 7 个条目 -
删除条目时也是同样的问题。当行大小下降到 4 而不是 5 时,页面会更新。如果我刷新页面,问题不会持续存在。例如,当我添加第 6 个条目并刷新页面时,页码按预期增加,删除时反之亦然。
我尝试对此进行调试,但无法弄清楚为什么会这样。我在这里做错了什么?我的代码-
@UiField(provided=true) CellTable<MyClass> myTable = new CellTable<MyClass>();
final ListDataProvider<MyClass> myProvider = new ListDataProvider<MyClass>();
final SingleSelectionModel<MyClass> selectionModel = new SingleSelectionModel<MyClass>();
@UiField(provided=true) Pagination pagination = new Pagination(PaginationSize.SMALL);
SimplePager pager;
myProvider.addDataDisplay(myTable);
// create and add columns
createPagination();
private void createPagination() {
myTable.setSelectionModel(selectionModel);
pager = new SimplePager(TextLocation.CENTER, ((SimplePager.Resources)GWT.create(SimplePager.Resources.class)), false, 0, false);
pager.setRangeLimited(false);
pager.setDisplay(myTable);
pager.setPageSize(5);
pagination.rebuild(pager);
}
我还在 onSuccess()
方法中调用 createPagination()
方法来实现添加和删除功能。
CellTable 和 Pagination 的 .ui.xml
-
<bc:CellTable ui:field="myTable" striped="true" bordered="true" width="800px" styleName="{style.myTableStyle}"/>
<b:Pagination ui:field="pagination" />
Adam 的评论帮助我调试了问题。
添加或删除数据后,我需要刷新 ListDataProvider
以便更改立即发生,而不是等到事件循环结束 -
myProvider.flush();
我有一个由 ListDataProvider 提供的带有分页的 CellTable。我将页面大小设置为 5,期望当 ListDataProvider 中的行数超过 5 的倍数时,页码会增加,反之亦然。我有添加和删除按钮,可用于添加和删除单元格行。
问题是分页以错误的 ListDataProvider 大小添加和删除页面。例如,由于页面大小为 5,我预计当我将第 6 行添加到 table 时,页面大小会增加。但是,当添加第 7 行而不是第 6 行时,页面大小会增加。
页面 未 增加第 6 个条目 -
页面增加了第 7 个条目 -
删除条目时也是同样的问题。当行大小下降到 4 而不是 5 时,页面会更新。如果我刷新页面,问题不会持续存在。例如,当我添加第 6 个条目并刷新页面时,页码按预期增加,删除时反之亦然。
我尝试对此进行调试,但无法弄清楚为什么会这样。我在这里做错了什么?我的代码-
@UiField(provided=true) CellTable<MyClass> myTable = new CellTable<MyClass>();
final ListDataProvider<MyClass> myProvider = new ListDataProvider<MyClass>();
final SingleSelectionModel<MyClass> selectionModel = new SingleSelectionModel<MyClass>();
@UiField(provided=true) Pagination pagination = new Pagination(PaginationSize.SMALL);
SimplePager pager;
myProvider.addDataDisplay(myTable);
// create and add columns
createPagination();
private void createPagination() {
myTable.setSelectionModel(selectionModel);
pager = new SimplePager(TextLocation.CENTER, ((SimplePager.Resources)GWT.create(SimplePager.Resources.class)), false, 0, false);
pager.setRangeLimited(false);
pager.setDisplay(myTable);
pager.setPageSize(5);
pagination.rebuild(pager);
}
我还在 onSuccess()
方法中调用 createPagination()
方法来实现添加和删除功能。
CellTable 和 Pagination 的 .ui.xml
-
<bc:CellTable ui:field="myTable" striped="true" bordered="true" width="800px" styleName="{style.myTableStyle}"/>
<b:Pagination ui:field="pagination" />
Adam 的评论帮助我调试了问题。
添加或删除数据后,我需要刷新 ListDataProvider
以便更改立即发生,而不是等到事件循环结束 -
myProvider.flush();