Ich habe zwei Domain-KlassenVaadin Combobox mit unterschiedlichen Eigenschaften anzuzeigen und zu binden
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
}
Die Idee ist, dass A
keine vollständige b
nicht speichern, sondern nur seine ID.
Jetzt möchte ich ein Formular in Vaadin (7.6.7) erstellen, um eine neue A
zu erstellen. Es gibt eine begrenzte Anzahl von B
Objekten, so dass ich gerne eine Combobox habe, wo der Benutzer eine B
auswählen kann.
Als id
von B
ist ein nicht-benutzerfreundlichen Bereich, Ich mag eine Combobox haben, das auf die Eigenschaft bId
im A
Objekt gebunden ist und präsentiert sich mit der Eigenschaft name
von B
.
Ich kann nicht herausfinden, wie dieser Code aussehen soll.
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
Ich weiß, das Problem ist, dass ich eine Combobox mit Typ B
auf ein Feld des String
Typs gebunden habe, aber wie kann ich es machen, dass ich all B
s mit dem Namen in der Combobox zeigen kann, aber wenn die commit
passiert, verwendet es die id
von B
?
Alternative Ansatz möglicherweise ein 'Converter' auf der' ComboBox', die die ID aus B-Objekten erhält, wenn Sie Ihre B-Objekte in der Kombinationsfeld füllen, aber ich habe es bisher nicht versucht. –
das scheint den Trick zu tun. Vielen Dank –