2015-10-05 37 views
0

我正在使用Hibernate MySQL编写基本的CRUD应用程序。 添加新记录没问题,但在编辑现有记录时,我现在有一些麻烦,使现有记录的值默认显示为选定的项目。 下面是相关代码:无论我做什么,Vaadin combobox.select()都不起作用

Criteria criteriaz = session.createCriteria(Organisation.class); 
final List<Organisation> orgList = criteriaz.list(); 
BeanItemContainer<Organisation> srcOrgs = new BeanItemContainer<Organisation>(Organisation.class); 
srcOrgs.addAll(orgList); 

organisationId.setInvalidAllowed(false); 
organisationId.setNullSelectionAllowed(false); 
organisationId.setContainerDataSource(srcOrgs); 
organisationId.setItemCaptionMode(ItemCaptionMode.PROPERTY); 
organisationId.setItemCaptionPropertyId("name"); 

for (Organisation mOrg : orgList) { 
        if (mOrg.getRowid().equals(activity.getOrganisationId())) 
         mOrgID = mOrg.getName(); 
       } 

organisationId.select(mOrgID); 

什么我错在这里做什么?

+0

有了细微的变化,两者的答案(几乎)是正确的。如果您查看[bean item contaier](https://vaadin.com/book/-/page/datamodel.container.html#datamodel.container.beanitemcontainer),主要想法是它将bean自身用作ID为项目。因此,在识别应选择的组织(通过其ID,名称等)之后,可以使用特定实例从列表中选择适当的项目。 – Morfic

回答

1

使用只是:

for (Organisation mOrg : orgList) { 
    if (mOrg.getRowid().equals(activity.getOrganisationId())) 
     organisationId.select(mOrg); 
     break; 
    } 

BeanItemContainer含有豆类的ID,所以你总是只豆类工作。

+0

一些解释,而不是只是代码会很好... – eirikir

+0

关闭,但实际上你需要通过'mOrg'选择'activity.getOrganisationId()'看起来会返回一个'Organisation'对象的id。 – Morfic

+0

谢谢@Morfic,我已经更新了我的答案。 – agad

1

虽然您设置标题属性ID来命名它不会更改项目的标识符ID。所以,你可以用下面的结合BeanItemContainer:

organisationId.select(orgList.get(mOrgID)); 

和改变这种

mOrgID = mOrg.getName(); 
to 
mOrgID = mOrg; 

为了@Morfic高兴:

organisationId.select(orgList.get(orgList.indexOf(mOrgID))); 
+0

为什么'orgList.get(mOrgID)'?你已经拥有'mOrg',所以只需调用'organisationId.select(mOrg)'并退出循环。 – Morfic

+0

@Morfic只是为了说清楚。 –

+0

没有冒犯,但我觉得很困惑...''orgList.get(mOrgID)'甚至不会编译,因为'List.get(int index)'需要一个'int'参数,并且您提供了一个' Organisation'。 – Morfic

相关问题