2015-10-05 77 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

相關問題