У меня есть простой класс POJO, который я хочу отобразить / обновить в форме
Используя класс BeanItem и привязку данных компонента, я смог быстро отобразить первые атрибуты класса данных «май». Однако я ударил стену для атрибутов, связанных с буксировкой:
мой класс обладает набором доступных состояний в виде списка объектов AppStatus. он также имеет текущий статус, то есть один из статусов в списке «доступных».
Я хотел бы отобразить список в форме в виде выпадающего списка с выбранным текущим статусом.
Мне удалось связать атрибут 'available' с комбинированным списком, но я не могу заполнить этот комбинированный список при настройке источника данных (метод setItemDataSource). Как я могу получить список доступных статусов и текущий статус из моего Предмета?
Я всегда мог бы использовать обходной путь и добавить параметр к методу, чтобы получить исходный объект в дополнение к BeanItem, но я бы предпочел этого избежать, если свойства Item могут дать мне мой атрибут.
Привет
Редактировать: сокращенный пример с кодом Эрика Р.
class Status {
String id;
Sting label
+ setter /getter
}
class App {
String AppId;
String AppLabel
ArrayList<Status> availablestatus;
Status currentStatus
+setter/getter
}
в расширении формы, в createField поляfactory я добавил следующие строки
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...
это не сработало, я получил комбинированный список с правильным количеством строк, но все пустые.
Я пытался использовать beanContainer вместо IndexedContainer
BeanContainer<String, ApplicationStatus> container =
new BeanContainer<String, ApplicationStatus>(ApplicationStatus.class);
container.addAll((Collection<ApplicationStatus>) item
.getItemProperty("availableStatus").
container.setBeanIdProperty("id");
результат немного лучше, так как у меня есть доступные значения в выпадающем списке.
только текущее значение не выбрано ...
Я также пытался использовать свойство nestedbean для получения идентификатора currenttstatus, но результат все еще недействителен ... я получаю комбинированный список с выбранным правильным значением, но я больше не могу видеть другие значения, так как поле со списком доступно только для чтения? (даже с setReadOnly (false);)