使用SelectionModel或ListDataProvider在CellList中选择元素 [英] Select element in CellList using SelectionModel or ListDataProvider

查看:147
本文介绍了使用SelectionModel或ListDataProvider在CellList中选择元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用CellList来列出我的数据,使用ListDataProvider管理数据,SelectionModel从CellList中选择一个元素并相应地生成事件。 现在,当我更新或使用cellList.getList().set(index,bean)或cellList.getList()。remove()它可以成功执行操作。但在此之后,它会自动选择我不想要的CellList中的第一条记录。



任何人都可以建议如何取消选中CellList中的所选记录吗?



以下是我如何初始化selectionmodel和listprovider的代码:

  ListDataProvider< AppsBean> ; dataProvider = new ListDataProvider< AppsBean>(); 
CellList< AppsBean> appsCellList;
SingleSelectionModel< AppsBean> singleSelectionModel;

ProvideKey< AppsBean> keyProvider = new ProvideKey< AppsBean>(){
public Object getKey(AppsBean item){
//总是进行空检查。
return(item == null)? null:item.getId();
}
};
//这里cell是AbstractCell< AppsBean>
appsCellList =新的CellList< AppsBean> (cell,keyProvider);
dataProvider.addDataDisplay(appsCellList);
appsCellList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);

singleSelectionModel = new SingleSelectionModel< AppsBean>(keyProvider);
appsCellList.setSelectionModel(singleSelectionModel);
singleSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler(){
$ b @Override
public void onSelectionChange(SelectionChangeEvent event){
AppsBean selectedApp = singleSelectionModel.getSelectedObject();
if(selectedApp!= null)
appsForm.fillApps(selectedApp);
}
});

当我添加新记录时:

  dataProvider.getList()。add(0,appsBean); 

更新记录:

  AppsBean bean = singleSelectionModel.getSelectedObject(); 
dataProvider.getList().set(dataProvider.getList()。indexOf(bean),appsBean);

并用于删除:

  int selectedIndex = dataProvider.getList()。indexOf(singleSelectionModel.getSelectedObject()); 
dataProvider.getList()。remove(selectedIndex);


解决方案

您必须实现一个KeyProvider才能使确保您选择的DTO即使在对象本身发生变化时也保持不变。

如果您没有提供KeyProvider,它可能会使用equals来比较这些对象,如果它们发生变化,那么您可能会遇到问题。

  ProvideKey keyProvider = new ProvideKey(){
public Object getKey(Contact item){
//返回您的DTO
return(item == null)的唯一标识符? null:item.id;
}
};

然后你必须用这个keyProvider初始化CellTable和selectionModel

  CellList cellList = new CellList(new ContactCell(),keyProvider); 

SelectionModel selectionModel = new SingleSelectionModel(keyProvider);
cellList.setSelectionModel(selectionModel);

更新
取消所选对象的作用如下:

  Object obj = selectionModel.getSelectedObject(); 
if(obj!= null){
selectionModel.setSelected(obj,false);
}


I have used CellList for listing my data using ListDataProvider for managing the data and SelectionModel for selecting an element from CellList and generating events accordingly.

Now when i update or delete element using cellList.getList().set(index, bean) or cellList.getList().remove() it sucessfully do the operation. But after that it automatically selects the first record in CellList which i do not want.

Can anyone suggest how can i deselect the selected record in CellList?

Below is the code how i am initializing the selectionmodel and listprovider:

ListDataProvider<AppsBean> dataProvider = new ListDataProvider<AppsBean>();
CellList<AppsBean> appsCellList;
SingleSelectionModel<AppsBean>  singleSelectionModel;

ProvidesKey<AppsBean> keyProvider = new ProvidesKey<AppsBean>() {
        public Object getKey(AppsBean item) {
            // Always do a null check.
            return (item == null) ? null : item.getId();
        }
    };
    //here cell is the AbstractCell<AppsBean>    
    appsCellList = new CellList<AppsBean> (cell, keyProvider);
    dataProvider.addDataDisplay(appsCellList);
    appsCellList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);

    singleSelectionModel = new SingleSelectionModel<AppsBean>(keyProvider);
    appsCellList.setSelectionModel(singleSelectionModel);
    singleSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            AppsBean selectedApp = singleSelectionModel.getSelectedObject();
            if (selectedApp != null)
                appsForm.fillApps(selectedApp);
        }
    });

When i am adding the new record:

dataProvider.getList().add(0, appsBean);

For updating the record:

AppsBean bean = singleSelectionModel.getSelectedObject();
dataProvider.getList().set(dataProvider.getList().indexOf(bean), appsBean);

And for delete:

int selectedIndex = dataProvider.getList().indexOf(singleSelectionModel.getSelectedObject());
dataProvider.getList().remove(selectedIndex);

解决方案

You will have to implement a KeyProvider in order to make sure that your selected DTO stays the same even when the object itself changes.
If you don't provide a KeyProvider it will probably use equals to compare the objects and if they change then you might run into problems.

ProvidesKey keyProvider = new ProvidesKey() {
    public Object getKey(Contact item) {
       //return the unique identifier for your DTO
       return (item == null) ? null : item.id;
    }
};

Then you have to initialize the CellTable and selectionModel with this keyProvider

 CellList cellList = new CellList(new ContactCell(),keyProvider);

 SelectionModel selectionModel = new SingleSelectionModel(keyProvider);
 cellList.setSelectionModel(selectionModel);

Update De-selecting a selected object works like this:

 Object obj  = selectionModel.getSelectedObject();
 if (obj != null) {
     selectionModel.setSelected(obj,false);
 }

这篇关于使用SelectionModel或ListDataProvider在CellList中选择元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆