我正在开发一个Vaadin应用程序。现在,我遇到了BeanItemContainer
的问题。我的容器里面有几件物品。
private void populateTable() {
tableContainer.removeAllItems();
for(MyBean myBean : beans){
tableContainer.addItem(myBean);
}
}
当我选择表格中的项目时,我将选中的项目与活页夹绑定,并自动填写表格
table.addItemClickListener(new ItemClickListener() {
public void itemClick(ItemClickEvent event) {
myBean = ((BeanItem<MyBean>) event.getItem()).getBean();
//BeanFieldGroup<MyBean>
binder.setItemDataSource(myBean);
}
});
private Component makeForm() {
formLayout = new FormLayout();
binder.bind(comboBoxModPag,"modPagamento");
binder.bind(fieldInizioVal, "id.dInizioVal");
formLayout.addComponent(comboBoxModPag);
formLayout.addComponent(fieldInizioVal);
formLayout.addComponent(binder.buildAndBind(getI18NMessage("dValidoAl"), "dValidoAl", DateField.class));
return formLayout;
}
现在,我必须以不同的方式管理用户交互。例如,如果用户修改了组合框内的值,我必须在容器中添加一个新的Bean,而如果用户修改了字段fieldInizioVal
的值,我必须更新当前的Bean。
insertOrUpdateButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
tableContainer.addItem(myBean));
}
});
但是,添加新项目时,容器会正确添加新项目,但也会修改所选的旧项目。
我该怎么办?
答案 0 :(得分:1)
comboBoxModPag.addValueChangeListener(new ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
MyBean oldValue = (MyBean) comboBoxModPag.getOldValue();
MyBean newValue = (MyBean) comboBoxModPag.getValue();
if( oldValue!=null && newValue!=null && !oldValue.equals(newValue) ){
insertMode = true;
}
else{
insertMode = false;
}
}
}
});
protected void saveOrUpdateModPagContrattoSito() {
if(insertMode){
MyBean newMyBean = new MyBean(myBean);
//Do somethings to restore myBean statuse
//....
//....
tableContainer.addBean(newMyBean);
}
else{
tableContainer.addBean(myBean);
}
table.refreshRowCache();
}
但我不知道这是否正确。