1

Vaadin 7 では、電話番号の ComboBox を POJO にネストされた POJO のリストにバインドしようとしています。例: リスト電話を含む PersonVo があります。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のリストphoneNumbersにバインドすることです。しかし、難しいのは、コンボボックスで選択されたものに基づいて、リスト内の適切な 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 に答える