1

在 Vaadin 7 中,我试图将我的电话号码组合框绑定到嵌套在 POJO 中的 POJO 列表。例如:我有 PersonVo,其中包含一个 List 电话;PersonCommunicationVo 包含电话号码的值。

我用来绑定 PersonVo 的其他属性的是:

BeanFieldGroup<PersonVo>personBinder = new BeanFieldGroup<PersonVo>(PersonVo.class);
personBinder.setItemDataSource(person);
myFormLayout.addComponent(personBinder.buildAndBind("Firstname", "firstName"));
myFormLayout.addComponent(personBinder.buildAndBind("Country", "country.name"));

这里是 PersonVo:

@Table(name = "CONTACT.T_PERSON")
@Entity
@Audited
public class PersonVo {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id",updatable = false)
    private Long personId;

    @Column(name = "FIRSTNAME")
    private String firstName;

    @Column(name = "LASTNAME")
    private String lastName;

    @Column(name = "TITLE")
    private String title;

    ...

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "personId")
    @AuditMappedBy(mappedBy = "personId")
    private List<PersonCommunicationVo> **phoneNumbers**;

    ...

和 PersonCommunicationVo:

@Entity
@Table(name = "CONTACT.PERSON_COMMUNICATION")
@Audited

public class PersonCommunicationVo {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id",updatable = false)
    private Long persCommId;

    @Column(name = "PERSON_ID")
    private Long personId;


    @ManyToOne
    @JoinColumn(name = "COM_TYPE_ID")
    private CommunicationTypesVo communicationType;

    @Column(name = "VALUE")
    private String **value**;

我想做的是根据 PersonCommunicationVo 的将我的电话号码组合框绑定到来自 PersonVo电话号码列表。但困难在于根据在组合框中选择的内容在列表中找到正确的 PersonCommunicationVo。例如:我在组合框中选择了电话号码 +32 123 456 789,这个值应该映射到 phoneNumbers.get(indexOfSelectedItem).getValue()。为了更新电话号码,添加一个新的等...

谢谢您的帮助!

4

2 回答 2

-1

也许我不了解您的数据模型,如果是这样,您能否发布 PersonVo、PhoneVo(?) 和 PersonCommunicationVo 并进一步解释一下为什么要像您一样保存它。为什么您的 personvo 包含电话列表?我以前从未与 beanfieldgroup 合作过,但我想到了类似的东西:

ComboBox cb = new ComboBox("Phones", person.getPhones())
personBinder.bind(cb, "phones");
myFormLayout.addComponent(cb);
于 2013-01-23T12:46:30.850 回答
-2

您可以尝试这样的事情(java 1.7 语法和 Vaadin7):

...
    FieldGroup fGroup = new FieldGroup( new BeanItem<PersonVo> (personInstance) );
...
    BeanItemContainer<PersonCommunicationVo> numbers = new BeanItemContainer<>( PersonCommunicationVo.class );
    numbers.addAll( personInstance.getPhoneNumbers() );

    ComboBox phoneCombo = new ComboBox( "Phone Numbers", numbers );
    phoneCombo.setItemCaptionMode( ItemCaptionMode.PROPERTY );
    phoneCombo.setItemCaptionPropertyId( "**value**" );

    fGroup.bind (phoneCombo, "**phoneNumbers**")

    myFormLayout.addComponent(phoneCombo);
...
于 2014-01-08T13:18:44.767 回答