aps109
aps109

Reputation: 167

how to bind field to foreign key in bean vaadin

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

Answers (1)

user3551612
user3551612

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

Related Questions