使用SelectionModel或ListDataProvider在CellList中选择元素 [英] Select element in CellList using SelectionModel or ListDataProvider
问题描述
我已经使用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屋!