2012-05-30 7 views
7

ComboBoxを定義しました。ユーザーは連絡先リストから連絡先を選択できます。 ComboBoxは連絡先の名前を表示していますが、実際の連絡先にマップするのに実際に使用することはできません。連絡先IDが必要です。私の問題は、リンクされた値とIDを持つVaadinComboBoxをどのように埋め込むのか分かりませんが、その値だけが表示されます。値とIDを持つVaadin ComboBox

// Add all organization contacts to the drop-down 
for (Contact contact : organizationContacts) { 
    contactName = contact.getName(); 
    contactId = contact.getId(); 
    _logger.debug("Adding contactName=" + contactName + " contactId=" + contactId + " to person with id=" + personId); 
    contactNameCombo.addItem(contactName); 
} 

// Add the contact of this person, and select it in the drop-down 
contactName = person.getContact().getName(); 
contactId = person.getContact().getId(); 
contactNameCombo.addItem(contactName); 
contactNameCombo.setValue(contactName); 

あなたは上記のコードで見ることができるように、私はComboBoxcontactNameを追加していますが、私は私が後で知ることができるように選択された項目から、またcontactIdを追加する方法がわからない、そのIDデータベースの更新に使用する必要があります。

答えて

10

これにはいくつかの方法があります。最も柔軟なのは、名前付きプロパティをキャプションとして使用するようにコンボボックスを構成することです。 詳細については、Book Of Vaadin on Selecting Itemsを参照してください。

// Set the caption mode to read the caption directly 
// from the 'name' property of the item 
contactNameCombo.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY); 
contactNameCombo.setItemCaptionPropertyId("name"); 

// Add all organization contacts to the drop-down 
for (Contact contact : organizationContacts) { 
    contactName = contact.getName(); 
    contactId = contact.getId(); 
    _logger.debug("Adding contactName=" + contactName + " contactId=" + contactId + " to person with id=" + personId); 

    // Note : the itemId of the item is the contactId 
    Item item = contactNameCombo.addItem(contactId); 
    item.getProperty("name").setValue(contactName) 
} 
// Add the contact of this person, and select it in the drop-down 
contactName = person.getContact().getName(); 
contactId = person.getContact().getId(); 
Item item = contactNameCombo.addItem(contactId); 
item.getProperty("name").setValue(contactName) 

// Using the itemId (which = contactId) to select the given contact 
contactNameCombo.setValue(contactId); 
+0

私は、このソリューションを実装することができませんでした。 getProperty( "name")はItemのメソッドとして存在しません。 getItemPropertyがありますが、私はそれを使用して成功しませんでした。 – dangonfast

+0

この解決策は私にとってもうまくいかなかったので、私の提案を見てください。私は使用しているvaadinのバージョンがわかりません; [ – BlueLettuce16

2

チャールズアンソニーは絶対に正しいです。

BeanContainerやBeanItemContainerのようなコンテナ(例:here)を利用して、ComboBoxに連絡先オブジェクトを追加することもできます。 あなたは、コンテナを記入してくださいあなたのコンボボックスに

contactNameCombo.setContainerDataSource(YOUR_CONTAINER); 

でそれを追加する必要があります。私の作品

// Set item caption for this item explicitly 
select.addItem(2); // same as "new Integer(2)" 
select.setItemCaption(2, "Deimos"); 

:@Charlesアンソニーによって与えられた

+0

このソリューションは有望です。データ用のBeanクラスを作成し、BeanContainerに複数のBeanを設定し、setContainerDataSource経由でComboBoxに関連付けました。すべてが適切に表示されます。今私は選択された値を取得する問題があります:私はコンボボックスでgetValue()を行う場合、私は表示されている値を取得します。私は実際にIdを手に入れたい。そのために、Beanデータを分析できるように、関連するコンテナに「選択された」Beanを取得したいと思います。コンボボックスにテキストを表示するために関連するコンテナ内のどのエントリが使用されているかを知ることは可能ですか? – dangonfast

+0

BeanContainerを使用する場合、setBeanIdProperty(Object o)を使用して、どのプロパティを自分のIDにするかをコンテナに設定できます。 BeanItemContainerを使用する場合は、 "完全な" Contactオブジェクトを取得します。 – nexus

9

ソリューションは、しかし、Webページ(https://vaadin.com/book/-/page/components.selecting.html)をvadinの著書に、いずれかの私のために動作しませんでした私は、次のコードを発見しました。

+0

私はこれを試して、それは私のためには、空白の値は... –

+0

setItemCaptionPropertyIdの後にsetItemCaptionが呼び出されても、setItemCaptionPropertyIdを使用しないように注意してください。これは手動のsetItemCaptionコードをオーバーライドします。 –

4

Vaadin 7:

statusSelectCombo.setItemCaptionMode(ItemCaptionMode.PROPERTY); 
statusSelectCombo.setItemCaptionPropertyId("courseOptionValue"); 

    IndexedContainer iContainer = new IndexedContainer(); 
    iContainer.addContainerProperty("courseId", String.class, ""); 
    iContainer.addContainerProperty("courseOptionValue", String.class, ""); 
    String addItemId=""; 
    String addItemCaption=""; 
for (int i = 0; i < comboItemsArray.length; i++) //String[] comboItemsArray 
{ 
    log.debug("comboItemsArray["+i+"] "+comboItemsArray[i]); 
    addItemId= comboItemsArray[i]; 
    addItemCaption=comboItemsArray[i]; 
    Item newItem = iContainer.getItem(iContainer.addItem()); 
    newItem.getItemProperty("courseId").setValue(addItemId); 
    newItem.getItemProperty("courseOptionValue").setValue(addItemId); 
} 
statusSelectCombo.setContainerDataSource(iContainer); 

ValueChangeListener listener = new Property.ValueChangeListener() 
{ 
    public void valueChange(ValueChangeEvent event) 
    { 
    statusSelectCombo.getItemIds(); 
    Property changedProperty = event.getProperty(); 
    Object selectedStatus = (Object) statusSelectCombo.getValue(); //it is get Value but gives object ID as an Object 
    Item rowItem = statusSelectCombo.getItem(selectedStatus); 
    final String selectedCourseId = (String) rowItem.getItemProperty("courseId").getValue();   

    } 
}; 
+0

本当に助かりました、ありがとう –

関連する問題