GWT UiBinder CellTable未使用AsyncDataProvider呈现

GWT UiBinder CellTable未使用AsyncDataProvider呈现,gwt,uibinder,celltable,Gwt,Uibinder,Celltable,我想在我的页面上使用UIBinderaCellTable创建一个从服务器接收到的数据。 我想我不太理解UiBinder的逻辑。调用initWidget()之前应该执行哪些步骤,不应该执行哪些步骤当我删除对configureDataProvider()的调用时,该表会出现,但它是空的,并且进度条正在运行。当我包含configureDataProvider()时,表根本不会呈现 请你解释一下这里发生了什么事好吗? @UiField(提供=true) 垂直小组选举; @UiField(提供的=真) 锚

我想在我的页面上使用
UIBinder
a
CellTable
创建一个从服务器接收到的数据。 我想我不太理解
UiBinder
的逻辑。调用
initWidget()
之前应该执行哪些步骤,不应该执行哪些步骤
当我删除对
configureDataProvider()
的调用时,该表会出现,但它是空的,并且进度条正在运行。当我包含
configureDataProvider()
时,表根本不会呈现

请你解释一下这里发生了什么事好吗?

@UiField(提供=true)
垂直小组选举;
@UiField(提供的=真)
锚;
@UiField(提供的=真)
锚定命令Stablanchor;
@UiField(提供的=真)
锚;工作人员;锚;
列出产品清单;
@UiField(提供的=真)
细胞表产品表;
@UiField(提供的=真)
简易寻呼机;
公共表选择小部件(){
SimplePage.Resources页面资源=GWT
.create(simplePage.Resources.class);
tableSelection=新的垂直面板();
productTableAnchor=新的Anchor();
ordersTableAnchor=新锚定();
staffTableAnchor=新锚();
productTable=新单元格表();
productTable.setPageSize(10);
configureTable();
寻呼机=新的SimplePage(TextLocation.CENTER,pagerResources,false,0,
正确的);
页面设置显示(productTable);
initWidget(uiBinder.createAndBindUi(this));
}
私有void configureTable(){
Column name Column=新列(
新建TextCell()){
@凌驾
公共字符串getValue(ProductDTO对象){
返回object.getName();
}
};
Column price Column=新列(
新建TextCell()){
@凌驾
公共字符串getValue(ProductDTO对象){
return object.getPrice().toString();
}
};
列quantityColumn=新列(
新建TextCell()){
@凌驾
公共字符串getValue(ProductDTO对象){
返回字符串.valueOf(object.getQuantity());
}
};
productTable.addColumn(nameColumn,“Name”);
productTable.addColumn(priceColumn,“价格”);
productTable.addColumn(quantityColumn,“数量”);
configureDataProvider();
}
私有void configureDataProvider(){
AsyncDataProvider provider=新的AsyncDataProvider(){
@凌驾
受保护的无效onRangeChanged(HasData显示){
final int start=display.getVisibleRange().getStart();
int length=display.getVisibleRange().getLength();
AsyncCallback callback=新的AsyncCallback(){
失败时的公共无效(可丢弃){
Window.alert(catch.getMessage());
}
成功时公开作废(列表结果){
产品=结果;
updateRowData(开始、结果);
}
};
productService.getAllProducts(回调);
}
};
provider.addDataDisplay(productTable);
provider.updateRowCount(products.size(),true);
}
编辑添加的ui.xml

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:c="urn:import:com.google.gwt.user.cellview.client"
    xmlns:ct="urn:import:com.ooo1sk.client.widgets">
    <ui:style>
    </ui:style>
    <g:HTMLPanel>
        <g:VerticalPanel styleName="" ui:field="tableSelection">
            <g:Anchor ui:field="ordersTableAnchor" text="Orders"></g:Anchor>
            <g:Anchor ui:field="productTableAnchor" text="Product"></g:Anchor>
            <g:Anchor ui:field="staffTableAnchor" text="Staff"></g:Anchor>
        </g:VerticalPanel>
        <g:HTMLPanel>
            <table cellspacing='0' cellpadding='0' style='width:100%;'>
                <tr>
                    <td valign='top'>
                        <c:CellTable addStyleNames='infoTable' pageSize='15'
                            ui:field='productTable' />
                    </td>
                </tr>
                <tr>
                    <td align='center'>
                        <c:SimplePager ui:field='pager' />
                    </td>
                </tr>
            </table>
        </g:HTMLPanel>
    </g:HTMLPanel>
</ui:UiBinder> 

UPD:更改后,它可以工作,但只显示前15行,但Pager显示所有91行,并在单击后更改编号

 private void configureDataProvider() {

    AsyncDataProvider<ProductDTO> provider = new AsyncDataProvider<ProductDTO>() {
        @Override
        protected void onRangeChanged(HasData<ProductDTO> display) {
        final int start = display.getVisibleRange().getStart();
        final int length = display.getVisibleRange().getLength();
   
        productService
            .getAllProducts(new AsyncCallback<List<ProductDTO>>() {

                public void onSuccess(List<ProductDTO> result) {
                label.setText("start " + start + " "
                    + "resultsize " + result.size() + " "
                    + "length " + length);
                products = result;
                updateRowCount(result.size(), true);
                updateRowData(start, result);

                }

                public void onFailure(Throwable caught) {
                Window.alert(caught.getMessage());
                }
            });
        }
    };
    provider.addDataDisplay(productTable);
    }
private void configureDataProvider(){
AsyncDataProvider provider=新的AsyncDataProvider(){
@凌驾
受保护的无效onRangeChanged(HasData显示){
final int start=display.getVisibleRange().getStart();
final int length=display.getVisibleRange().getLength();
产品服务
.getAllProducts(新的AsyncCallback(){
成功时公开作废(列表结果){
label.setText(“开始”+开始+”
+“resultsize”+结果大小()
+“长度”+长度);
产品=结果;
updateRowCount(result.size(),true);
updateRowData(开始、结果);
}
失败时的公共无效(可丢弃){
Window.alert(catch.getMessage());
}
});
}
};
provider.addDataDisplay(productTable);
}
好的,玩数字解决了这个问题。在
updateRowData(开始,结果)中我将
start
更改为
0
,现在工作正常。尽管如此,我还是非常感谢专家对这方面的任何评论。

是类的一种方法,用于将自身初始化为小部件可能内部聚合的包装器。通常,您创建一个基于给定小部件的小部件组合,然后将其传递给
initiWidget()
方法。这样,根元素就不会暴露(就其方法而言),但仍会像从未包装过一样工作

在您的示例中,
UiBinder
负责定义UI,因此您将绑定创建的返回传递给该方法(
UiBinder.createAndBindUi(this)
)。在此调用之前(实际上,在
createAndBindUi()
之前,但通常它绑定到
initWidget()
),您必须实例化所有标有
@UiField(provided=true)
的小部件,即所有需要正确初始化的小部件,否则将无法以普通
UiBinder
样式进行初始化。在您的情况下,您不需要标记所有
provided=true
,只有
CellTable
需要标记(用于专门化)

回到您的问题,如果删除
configureDataProvider()
调用,您将永远不会设置
AsyncDataProvider
,并且根本看不到任何数据(旋转的gif是因为在某个地方-记不起现在在哪里-行计数已设置为0)。如果启用它,对
addDataDisplay()
的调用将隐式强制执行范围更新,该更新将