【问题标题】:how to bind field to foreign key in bean vaadin如何在bean vaadin中将字段绑定到外键
【发布时间】:2014-06-06 12:05:43
【问题描述】:

我有我的豆子

   public class RegistrationEntity 
 {
private Long accountNumber;
private String firstName;
private String middleName;
private String lastName;


// occupation entity is another table
private OccupationEntity occupationEntity;
}

组件是这样的

 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");

只要考虑firstName和lastName就可以这样绑定

  fieldgroup.bind(firstName,"firstName");

但是如何将职业 NativeSelect 绑定到职业实体 ????

【问题讨论】:

    标签: java web frameworks vaadin


    【解决方案1】:

    对于这种情况,您可以使用 BeanFieldGroup 和自定义 FieldGroupFieldFactory:

    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);
    

    【讨论】:

    • 使用 super 代替 defaultFactory?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多