1

嗨,我是 GWT 的新手,所以也是 GWTP 的新手。

我尝试使用 CellTables,并决定首先在 developer.google.com/web-toolkit/doc/2.4/DevGuideUiCellWidgets#celltable 上构建一个简单的 GWT 文档。我调整了一些东西来匹配 GWTP MVP 设计。

首先,我在 View.ui.xml 文件上创建了 Celltable:

xmlns:c="urn:import:com.google.gwt.user.cellview.client">
<g:HTMLPanel>
     <c:CellTable pageSize='15' ui:field='cellTable' />
</g:HTMLPanel>

然后,我创建了一个联系人类:

public class Contact {
    private final String address;
    private final String name;

    public Contact(String name, String address) {
      this.name = name;
      this.address = address;
    }

    public String getAddress() {
        return address;
    }

    public String getName() {
        return name;
    }
}

在我的 View.java 文件中:

@UiField(provided=true) CellTable<Contact> cellTable = new CellTable<Contact>();

public CellTable<Contact> getCellTable() {
     return cellTable;
}

最后在我的 Presenter.java 文件中:

public interface MyView extends View {
   CellTable<Contact> getCellTable();
}

@Override
protected void onReset() {
    super.onReset();

    // Create name column.
    TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
          @Override
          public String getValue(Contact contact) {
            return contact.getName();
          }
        };

    // Create address column.
   TextColumn<Contact> addressColumn = new TextColumn<Contact>() {
          @Override
          public String getValue(Contact contact) {
            return contact.getAddress();
          }
        };

    // Add the columns.
    getView().getCellTable().addColumn(nameColumn, "Name");
    getView().getCellTable().addColumn(addressColumn, "Address");

    // Set the total row count. 
    getView().getCellTable().setRowCount(CONTACTS.size(), true);

    // Push the data into the widget.
    getView().getCellTable().setRowData(0, CONTACTS);
}

一切对我来说似乎都很好,但是当我尝试这段代码时没有显示 CellTable ......而且我没有收到任何错误......

在此先感谢您的帮助!

4

1 回答 1

0

看起来您没有为您的 CellTable 使用/注册 DataProvider。GWT CellWidgets 基于 DataProvider/DIsplay 模式。所以 CellTable 只是你的 DataProvider 的一个显示。一个 DataProvider 可以有多个显示器。

你不需要写:

// Set the total row count. 
getView().getCellTable().setRowCount(CONTACTS.size(), true);

// Push the data into the widget.
getView().getCellTable().setRowData(0, CONTACTS);

您需要将 CellTable 注册为 DataProvider 的显示(例如 ListDataProvider),然后在使用新数据更新 DataProvider 时调用 refresh 方法。

于 2012-10-04T22:05:49.680 回答