1
我有兩個領域類Vaadin組合框具有不同的屬性來顯示和綁定
public class A {
private String nick;
private String bId;
// getters & setters
}
public class B {
private String id;
private String name;
// a lot of other fields
// getter and setters
}
的想法是,A
不保存一個完整的b
,但只有其ID。
現在我想在Vaadin(7.6.7)中創建一個表單,以創建一個新的A
。有限數量的B
對象可用,所以我喜歡有一個Combobox,用戶可以在其中選擇B
。
由於B
的id
是一種非人性化的領域,我想有一個組合框,即在A
對象綁定到的屬性bId
並提出本身的屬性B
name
。
我不明白這段代碼應該是什麼樣子。
FormLayout layout = new FormLayout();
BeanFieldGroup<A> dataBinder = new BeanFieldGroup(A.class);
Field<?> nickField = dataBinder.buildAndBind("nick");
layout.addComponent(nickField);
Combobox bBox = new Combobox("B");
List<B> allBs = ... // get all Bs;
allBs.stream().forEach(bBox::addItem);
dataBinder.bind(bBox, "bId");
// this does not work really
我知道這個問題是我已經綁定B
類型的組合框的類型String
的領域,但我怎麼做呢,我可以顯示所有B
s的名字在ComboBox,但是當commit
發生時,它使用B
的id
?
替代方法可能是'ComboBox'上的'Converter',當您在組合框中填充B對象時,可以從B對象中獲取ID,但到目前爲止我沒有嘗試過。 –
似乎確實做到了。謝謝 –