Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
Extending DefaultFieldFactory to Handle ListSelect
Hi,
My bean to populate into form is something like this:
public class Foo {
@ManyToMany
private Set<Boo> boos = new HashSet<Boo>();
@NotNull
private Date creationDate;
@NotNull
private String name;
... setter and getter skipped
}
Then I create my DataSource with
form.setItemDataSource(new BeanItem<Invito>(myPoplatedModel));
While String and Date fields comes with rigth Field Type for boos I prefer to have a ListSelect, so I extended my FieldFormFactory like this:
form.setFormFieldFactory(new DefaultFieldFactory() {
@Override
public Field createField(Item item, Object propertyId, Component uiContext) {
Field field = super.createField(item, propertyId, uiContext);
if (propertyId.equals("boos")) {
field = new ListSelect();
field.setCaption("Boos Label);
// WorkAround Here
((ListSelect) field).setMultiSelect(true);
}
return (field);
}
The ListSelect appear correctly but it is empty, the only solution I found is this very bad workaround
replacing the string
// WorkAround Here
with
//FIXME Workaround
for (Boo boo : myPoplatedModel.getBoos) {
((ListSelect) field).addItem(boo);
}
Now it works, but I prefer a more clean way.
Does someone may help me?
Regards
You need to populate the select with items yourself as nobody else can now what should be in the select. In your code you only add the items in your Set (you end up with a ListSelect with all items selected). What about if there is a Boo that is not in the Set? Typically you would add all possibilities of Boo to the select and the Form will take care of selecting only those in your Set.