GWT CheckboxCell阻碍了CellTable中的选择

时间:2013-02-15 08:21:06

标签: gwt checkbox cell celltable selectionmodel

我发现如果你有一个GWT CellTable并添加一个包含CheckboxCell的列,那么通过SingleSelectionModel的选择将不再有效。此单元格类型确实阻碍了行选择。 以下代码示例演示了2.5.0.rc1中的此行为。

final CellTable<LicenseDto> licenseTable = new CellTable<LicenseDto>();
final SingleSelectionModel<LicenseDto> selectionModel = new SingleSelectionModel<LicenseDto>();
licenseTable.setSelectionModel(selectionModel);


//--- If I add this column, the selection does work.
Column<LicenseDto, String> workingColumn = new Column<LicenseDto, String>(new TextCell()) {

    @Override
    public String getValue(LicenseDto object) {
        return "Works";
    }
};
workingColumn.setFieldUpdater(new FieldUpdater<LicenseDto, String>() {

    @Override
    public void update(int index, LicenseDto object, String value) {
        ;
    }
});
licenseTable.addColumn(workingColumn);


//--- If I add this column, the selection does NOT work anymore.
Column<LicenseDto, Boolean> notWorkingColumn = new Column<LicenseDto, Boolean>(new CheckboxCell(true, true)) {

    @Override
    public Boolean getValue(LicenseDto object) {
        return object.getEnabled();
    }
};
notWorkingColumn.setFieldUpdater(new FieldUpdater<LicenseDto, Boolean>() {

    @Override
    public void update(int index, LicenseDto object, Boolean value) {
        presenter.enableLicense(object, value);
    }
});
licenseTable.addColumn(notWorkingColumn);

initWidget(licenseTable);

您可以组合多个单元格并将它们添加到表格中(例如LinkActionCell等)。只要没有CheckboxCellSingleSelectionModel的蓝色选择就像魅力一样。有谁看到我对这个CheckboxCell做错了还是有错误?

1 个答案:

答案 0 :(得分:3)

谢谢托马斯!问题是我设置handlesSelection = true甚至认为我没有处理任何事情。将其设置为false可以解决问题。 顺便说一句,我在列中添加fieldUpdater来处理复选框的勾选或取消勾选:

Column<LicenceDto, Boolean> enableLicenseColumn = new Column<LicenceDto, Boolean>(new CheckboxCell(false, false)) {

    @Override
    public Boolean getValue(LicenceDto object) {
        return object.getEnabled();
    }
};
enableLicenseColumn.setFieldUpdater(new FieldUpdater<LicenceDto, Boolean>() {

    @Override
    public void update(int index, LicenceDto object, Boolean value) {
        presenter.enableLicense(object, value);
    }
});

问题得到解答。