【问题标题】:GWT - Pagination adds and removes pages incorrectly at edge case scenariosGWT - 分页在边缘情况下错误地添加和删除页面
【发布时间】:2018-03-23 15:34:04
【问题描述】:

我有一个由 ListDataProvider 提供的带有分页功能的 CellTable。我将页面大小设置为 5,期望当 ListDataProvider 中有超过 5 行的倍数时,页码会增加,反之亦然。我有添加和删除按钮,可用于添加和删除单元格行。

问题在于分页以错误的 ListDataProvider 大小添加和删除页面。例如,由于页面大小为 5,我希望当我将第 6 行添加到表中时,页面大小会增加。但是,当添加第 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 和分页的 .ui.xml -

<bc:CellTable ui:field="myTable" striped="true" bordered="true" width="800px" styleName="{style.myTableStyle}"/>
<b:Pagination  ui:field="pagination" />

【问题讨论】:

  • ListDataProvider 由一个列表支持。你确定你是通过ListDataProvider而不是直接在列表中修改行吗?只有对ListDataProvider::getList() 返回的列表的修改才会反映在模型中。

标签: java gwt pagination uibinder celltable


【解决方案1】:

Adam 的评论帮助我调试了问题。

添加或删除数据后,我需要刷新ListDataProvider,以便立即进行更改,而不是等到事件循环结束 -

myProvider.flush();

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多