GWT CellTable SelectionModel无法在编辑后取消选择项目

时间:2013-05-07 15:29:16

标签: gwt gwt-rpc celltable selectionmodel

您好我有一个联系类,其中包含我在 CellTable 中显示的信息。 CellTable DataListProvider MultiSelectionModel KeyProvider 它会检查联系人 id

DataListProvider和CellTable具有相同的KeyProvider。

如果我选择/取消选择 CellTable 中的项目,并在 TextBox 中显示它们正常工作。但是当我更改TextBox(Contact实例)中Contact项的值并尝试取消选择项目时,selectionmodel表示它仍然被选中?

我尝试使用 clear(),但仍然选择了它!

GWT 2.5 / FireFox

ProvidesKey<Contact> keyProvider = new ProvidesKey<Contact>(){
    @Override
    public Object getKey(Contact item) {
        return item.getIdContact();
    }
};


public MyCellTable(boolean canLoad, Integer pagesize, ProvidesKey<T> keyProvider) {
    super(-1, resource, keyProvider);

    selectionModel = new MultiSelectionModel<T>();
    selectionModel .addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            selectionChange();
        }
    });

    dataProvider = new ListDataProvider<T>(keyProvider);
    dataProvider.addDataDisplay(this);
}

在选择事件中我打电话

protected void selectionChange(){
    Contact c = grid.getGrid().getSelectedItem();
    if(c != null){
        cpForm.enable();
        cpForm.clear();
        form.bind(c); // Formular which updates the selected instance 
        cpForm.add(form);
    }else{
        cpForm.disable(noseletionText);
    }
}

我没有 ValueUpdater

当我选择一个项目时,我生成一个公式,如果我改变了我称之为的东西:

@Override
public void save() {
    super.save();
    ContactServiceStore.get().updateContact(manager.getBean(),
            new MyAsyncCallback<Void>() {

                @Override
                public void onSuccess(Void result) {
                    onchange();
                }

            });
}

我如果调用方法而不更改联系人仍在工作,我可以取消选择,但当我更改名称或其他东西时,我无法选择其他项目或取消选择当前项目!

1 个答案:

答案 0 :(得分:0)

您实际上并未在ProvidesKeys中使用MultiSelectionModel。您需要像这样创建MultiSelectionModel

MultiSelectionModel<T> selectionModel = new MultiSelectionModel<T>(keyProvider);

如果您未向MultiSelectionModel提供ProvidesKey,则会将实际对象用作关键字。

确保您还将MultiSelectionModel添加到表格中:

cellTable.setSelectionModel(selectionModel);

selectionModel.clear()无效的原因是因为selectionModel未设置为表格。