Reputation: 167
I have my bean as this
public class RegistrationEntity
{
private Long accountNumber;
private String firstName;
private String middleName;
private String lastName;
// occupation entity is another table
private OccupationEntity occupationEntity;
}
components are like this
firstName = new TextField("First Name");
firstName.setRequired(true);
firstName.setWidth(COMMON_FIELD_WIDTH);
lastName = new TextField("Last Name");
lastName.setRequired(true);
lastName.setWidth(COMMON_FIELD_WIDTH);
occupation = new NativeSelect("Occupation:");
occupation.setRequired(true);
occupation.setImmediate(true);
occupation.setWidth(COMMON_FIELD_WIDTH);
occupation.setNullSelectionItemId("--Select--");
occupation.addItem("Static");
as long as firstName and lastName are considered can be binded like this
fieldgroup.bind(firstName,"firstName");
but how can I bind occupation NativeSelect to occupationEntity ?????
Upvotes: 1
Views: 604
Reputation: 206
You can use BeanFieldGroup and custom FieldGroupFieldFactory for this case:
binder = new BeanFieldGroup<RegistrationEntity>(RegistrationEntity.class);
binder.setFieldFactory(new FieldGroupFieldFactory() {
private DefaultFieldGroupFieldFactory defaultFactory = new DefaultFieldGroupFieldFactory();
@Override
public <T extends Field> T createField(Class<?> dataType, Class<T> fieldType) {
if ("OccupationEntity".equals(dataType.getName())) {
BeanItemContainer<OccupationEntity> occupationEntityContainer = new BeanItemContainer<OccupationEntity>(OccupationEntity.class);
occupationEntityContainer.addAll(allEntities);
Field field = new Combobox("Occupation:", occupationEntityContainer);
((Combobox) field).setItemCaptionPropertyId(--Insert caption bean property here--);
((Combobox) field).setNullSelectionAllowed(false);
return fieldType.cast(field);
}
return defaultFactory.createField(dataType, fieldType);
}
});
binder.setItemDataSource(item);
Upvotes: 2