2013-01-23 68 views
1

在Vaadin 7中,我試圖將我的ComboBox的電話號碼綁定到POJO中的POJO列表。 例如:我有PersonVo,它包含一個List電話; PersonCommunicationVo包含電話號碼的值。Vaadin - 如何綁定POJO的列表

我用結合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**; 

而且我想做些什麼將我的電話號碼組合框綁定到列表phoneNum來自PersonVo的基於來自PersonCommunicationVo的。 但是難點在於根據組合框中選擇的內容在列表中選擇正確的PersonCommunicationVo。例如:我在組合框中選擇了電話號碼+32 123 456 789,該值應該映射到phoneNumbers.get(indexOfSelectedItem).getValue()。 爲了更新電話號碼,添加一個新的等...

感謝您的幫助!

回答

-1

也許我不明白你的datamodel,如果是這樣,你可以請發佈PersonVo,PhoneVo(?)和PersonCommunicationVo並進一步解釋它爲什麼你想像你一樣保存它。爲什麼你的personvo包含一個手機列表?我從來沒有與前beanfieldgroup工作,但我想是這樣的:

ComboBox cb = new ComboBox("Phones", person.getPhones()) 
personBinder.bind(cb, "phones"); 
myFormLayout.addComponent(cb); 
+0

對不起,我可憐的解釋和我的英語不好。我編輯了這個問題:) – kiseiju

+0

組合框只有1個項目作爲值,所以它不能綁定到列表屬性。我想過表格,但即使在多選模式下,您也需要選擇所有元素。 – agad

-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); 
... 
+0

ComboBox只有1個項目作爲值,因此它不能綁定到列表屬性。我想過表格,但即使在多選模式下,您也需要選擇所有元素。 – agad