私はフォームで表示/更新したい単純なPOJOクラスを持っています
BeanItemクラスとコンポーネントデータのバインディングを使用して、データクラスであってもよい。しかし、私はトウ関連の属性の壁にヒットしました:ネストされたbean:オブジェクトの中のコレクション
私のクラスは、オブジェクト 'AppStatus'のリストとして利用可能なステータスのセットを持っています。それはまた、現在のステータス、すなわち「利用可能」リストのステータスの1つを所有しています。
私はコンボボックスとしてフォームにリストを表示したいと思います。現在のステータスが選択されています。
私は '利用可能'属性をコンボボックスに関連付けることができましたが、データソース(メソッドsetItemDataSource)の設定時にこのコンボボックスを埋めることができないようです。私はどのように私のアイテムからavalaibleステータスリストと現在のステータスを取得するのですか?
私はいつも回避策を使用してBeanItemに加えてソースオブジェクトを取得するためのパラメータをメソッドに追加できますが、Itemプロパティで自分の属性を与えることができる場合はこれを避けることをお勧めします。
よろしく
編集:fieldfactoryのcreateFieldに、エリックR.形態の拡張で
class Status {
String id;
Sting label
+ setter /getter
}
class App {
String AppId;
String AppLabel
ArrayList<Status> availablestatus;
Status currentStatus
+setter/getter
}
のコードと、exemple短縮iを加え、次の行
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を使用しようとしました。 currentValueだけが選択されていません...
また、NestedBeanプロパティを使用してcurrentstatusのIDを取得しようとしましたが、結果はまだ有効ではありません...正しい値が選択されたコンボボックスが表示されますコンボボックスは読み込み専用なので、もう値が見えないのですか?(setReadOnly(false);でも)
コンボボックスの値を(少なくとも)得ることができましたが、 currentValueを選択してください(私の編集のように) –
@PATRY私のコードを更新しました。 –
ありがとうございました。これはかなりの時間私を困惑させている! infoについては、コンボボックスがこのプロパティのFieldFactoryのcreateFieldで作成されている場合、 "status.setpropetyDataSource ..."は不要です。自動的に行われるようです –