java - 无法对 CellTable 列进行排序

标签 java gwt gwt-celltable

尝试使我的 CellTable 列可排序,但我无法使其工作。我有一个 MVP 应用程序,它从休息服务获取数据。显示表中的数据工作正常,但排序不起作用。

public class LicenseUsageUserViewImpl<T> extends Composite implements LicenseUsageUserView<T> {

    @UiTemplate("LicenseUsageUserView.ui.xml")
    interface LicenseDataViewUiBinder extends UiBinder<ScrollPanel,LicenseUsageUserViewImpl> {}

    private static LicenseDataViewUiBinder uiBinder = GWT.create(LicenseDataViewUiBinder.class);

    @UiField
    CellTable<GWTLicenseUser> licenseUserCellTable;

    List<GWTLicenseUser> licenseUsers;

    ListDataProvider<GWTLicenseUser> dataProvider;

    public List<GWTLicenseUser> getLicenseUsers() {
        return licenseUsers;
    }

    public void setLicenseUsers(List<GWTLicenseUser> licenseUsers) {
        this.licenseUsers = licenseUsers;
    }

    @UiField Label header;

    ListHandler<GWTLicenseUser> sortHandler;

    public LicenseUsageUserViewImpl() {
        initWidget(uiBinder.createAndBindUi(this));
        initCellTable();
    }

    @Override
    public void setLicenseUsersTable(List<GWTLicenseUser> tmpLicenseUsers) {
        if (tmpLicenseUsers.isEmpty()) {

            licenseUserCellTable.setVisible(false);

        } else {

            setLicenseUsers(tmpLicenseUsers);
            licenseUserCellTable.setWidth("100%");
            licenseUserCellTable.setVisible(true);
            licenseUserCellTable.setPageSize(getLicenseUsers().size());
            licenseUserCellTable.setRowCount(getLicenseUsers().size(), false);
            licenseUserCellTable.setRowData(0, getLicenseUsers());
            licenseUserCellTable.setVisibleRange(new Range(0, licenseUserCellTable.getRowCount()));

            sortHandler.setList(getLicenseUsers());

            dataProvider.getList().clear();
            dataProvider.getList().addAll(getLicenseUsers());
        }

    }

    @Override
    public void initCellTable() {

        sortHandler = new ListHandler<GWTLicenseUser>(getLicenseUsers());
        licenseUserCellTable.addColumnSortHandler(sortHandler);

        licenseUserCellTable.setWidth("100%");
        licenseUserCellTable.setVisible(true);
        licenseUserCellTable.setVisibleRange(new Range(0, licenseUserCellTable.getRowCount()));

        // Create a data provider.
        dataProvider = new ListDataProvider<GWTLicenseUser>();

        // Connect the table to the data provider.
        dataProvider.addDataDisplay(licenseUserCellTable);

        licenseUserCellTable.setWidth("100%");
        licenseUserCellTable.setAutoHeaderRefreshDisabled(true);
        licenseUserCellTable.setAutoFooterRefreshDisabled(true);


        // userID
        TextColumn<GWTLicenseUser> userIdColumn = new TextColumn<GWTLicenseUser>() {

            @Override
            public String getValue(GWTLicenseUser object) {

                if (object != null ){
                    return object.getUserId();
                } else {
                    return "NULL";
                }
            }

        };
        userIdColumn.setSortable(true);
        sortHandler.setComparator(userIdColumn, new Comparator<GWTLicenseUser>() {
            @Override
            public int compare(GWTLicenseUser o1, GWTLicenseUser o2) {
              return o1.getUserId().compareTo(o2.getUserId());
            }
          });
        licenseUserCellTable.addColumn(userIdColumn, "User ID");


        // more column entries


        licenseUserCellTable.getColumnSortList().push(userIdColumn);
        licenseUserCellTable.getColumnSortList().push(countColumn);

        licenseUserCellTable.addColumnSortHandler(sortHandler);

    }

}

setLicenseUsersTable 是从我的 Activity 中调用的,其中包含我的用户的响应列表。当我启动我的应用程序并进行休息调用时,我的数据被提供并放入我的列表中,该列表也显示在 CellTable 中,但它不可排序,但我的列名称之前有这个排序图标。我想我发布了整个代码,因为我认为它更容易看到我正在尝试做什么。

感谢您的帮助。

最佳答案

删除此行:

sortHandler.setList(getLicenseUsers());

您已将 List 传递到 SortHandler 构造函数中

sortHandler = new ListHandler<GWTLicenseUser>(getLicenseUsers());

另外,代替

setLicenseUsers(tmpLicenseUsers);

您可能需要使用

licenseUsers.addAll(tmpLicenseUsers);

我希望其中之一能够解决这个问题。

关于java - 无法对 CellTable 列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805177/

相关文章:

dom - 这是 JSNI 中 $doc.getElementById ("id") 和 document.getElementById ("id") 之间的区别

java - GWT- CellTable--设置行突出显示的问题

java - 分页时 CellTable 高度缩小

java - GWT 等待 setVisibleRangeAndClearData 完成

java - 使用 Clojure 访问 Java 静态内部类

java - 从对象创建对象输出流

java - 小程序中未找到主要方法错误

java - 在 Android textSwitcher 中使用上标

gwt - GWT user.agent属性以及它们对应的浏览器的权威列表

javascript - 如何添加在 GWT 中使用的 javascript 脚本?