我得到了一個簡單的POJO類,我希望在表單中顯示/更新
使用BeanItem類和組件數據綁定,我能夠快速顯示第一個屬性可能數據類。不過,我已經打了一個牆相關的屬性:嵌套bean:對象內的集合
我的課擁有一組可用的狀態,作爲對象'AppStatus'的列表。它也具有當前狀態,這是「可用」列表中的狀態之一。
我想在窗體中顯示列表作爲組合框,並選擇當前狀態。
我設法將'可用'屬性與一個組合框相關聯,但是當設置數據源(方法setItemDataSource)時,我似乎無法填充此組合框。我如何從我的項目中獲得可用狀態列表和當前狀態?
我總是可以使用一個解決方法,並添加一個參數到方法來獲得除了BeanItem之外的源對象,但如果Item屬性可以給我我的屬性,我寧願避免這一點。
問候
編輯:從埃裏克R.
class Status {
String id;
Sting label
+ setter /getter
}
class App {
String AppId;
String AppLabel
ArrayList<Status> availablestatus;
Status currentStatus
+setter/getter
}
形式延伸
縮短爲例,用代碼,在fieldfactory的createField我添加下列行
if ("status".equals(propertyId)) {
// create the combobox
ComboBox status = new ComboBox(
texts.getString("application.label.status"));
status.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
status.setItemCaptionPropertyId("label");
status.setImmediate(true);
status.setNullSelectionAllowed(false);
IndexedContainer container = new IndexedContainer(
(Collection<ApplicationStatus>) item.getItemProperty(
"availableStatus").getValue());
status.setContainerDataSource(container);
status.setPropertyDataSource(item.getItemProperty("currentStatus"));
return status;
} else...
這不起作用,我得到一個組合框,正確的行數,但所有的空。
我試圖用IndexedContainer
BeanContainer<String, ApplicationStatus> container =
new BeanContainer<String, ApplicationStatus>(ApplicationStatus.class);
container.addAll((Collection<ApplicationStatus>) item
.getItemProperty("availableStatus").
container.setBeanIdProperty("id");
的beanContainer而不是結果稍微好一點,因爲我確實有ComboBox中可用的值。 只有currentValue沒有被選中...
我也嘗試使用nestedbean屬性來獲取當前狀態的id,但結果仍然無效......我得到一個組合框,並選擇了正確的值,但我不能再看到其他值,因爲組合框是隻讀的(即使使用setReadOnly(false);)
幫助我得到(至少)在組合框中的值,但我似乎無法得到所選的currentValue(如我的編輯所示) – 2012-03-17 00:59:33
@PATRY我剛剛更新了我的代碼。 – 2012-03-17 01:56:48
非常感謝。這讓我困惑了很長一段時間!有關信息,如果在此屬性的FieldFactory的createField中創建組合框,則不需要「status.setpropetyDataSource ...」。這似乎是自動完成的 – 2012-03-17 10:42:03