2012-05-30 12 views
7

मैंने ComboBox परिभाषित किया है जो उपयोगकर्ता को अपनी संपर्क सूची से संपर्क चुनने की अनुमति देता है। कॉम्बोबॉक्स संपर्क नाम दिखा रहा है, लेकिन वास्तव में वास्तविक संपर्क में मैप करने के लिए इसका उपयोग नहीं किया जा सकता है: संपर्क आईडी की आवश्यकता है। मेरी समस्या यह है कि मुझे नहीं पता कि VaadinComboBox लिंक किए गए मानों और आईडी के साथ कैसे पॉप्युलेट करना है, लेकिन केवल मान दिखा रहा है।वैडिन कॉम्बोबॉक्स मूल्य और आईडी के साथ

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

आप कोड से ऊपर, मैं ComboBox को contactName द्वारा जोड़ा जा रहा में देख सकते हैं, लेकिन मैं यह भी जोड़ना कैसे contactId ताकि मैं बाद में पता कर सकते हैं, चयनित प्रविष्टि है, जो आईडी से पता नहीं है डेटाबेस अद्यतन करने के लिए इस्तेमाल किया जाना चाहिए।

उत्तर

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") आइटम के लिए विधि के रूप में मौजूद नहीं है। इटिमप्रोपर्टी प्राप्त है, लेकिन मुझे इसका उपयोग करने में कोई सफलता नहीं मिली। – dangonfast

+0

यह समाधान मेरे लिए काम नहीं करता है, कृपया मेरे प्रस्ताव पर नज़र डालें। मुझे नहीं पता कि आप किस वैडिन का उपयोग कर रहे हैं; [ – BlueLettuce16

2

चार्ल्स एंथनी बिल्कुल सही है।

आप अपने कॉम्बोबॉक्स में अपनी संपर्क ऑब्जेक्ट जोड़ने के लिए उदाहरण के लिए बीनकॉन्टेनर या बीन इटैमकॉन्टेनर जैसे कंटेनर का लाभ भी ले सकते हैं (अधिक जानकारी 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"); 

जो मेरे लिए काम करता है:

+0

यह समाधान आशाजनक दिखता है। मैंने अपने डेटा के लिए एक बीन क्लास बनाया है, कई बीन्स के साथ एक बीनकॉन्टेनर पॉप्युलेट किया है, और कॉम्बोबॉक्स से सेटकॉन्टेनरडेटासोर्स के माध्यम से जुड़ा हुआ है। सबकुछ ठीक से प्रदर्शित होता है। अब मुझे चयनित मूल्य प्राप्त करने में कोई समस्या है: यदि मुझे कॉम्बोबॉक्स पर वैल्यू() मिलता है तो मुझे मूल्य प्रदर्शित किया जा रहा है। मैं वास्तव में आईडी प्राप्त करना चाहता हूँ। इसके लिए, मैं संबंधित कंटेनर में "चयनित" बीन प्राप्त करना चाहता हूं, ताकि मैं बीन डेटा का विश्लेषण कर सकूं। क्या यह जानना संभव है कि संबंधित कंटेनर में कौन सी प्रविष्टि को combobox में पाठ प्रदर्शित करने के लिए उपयोग किया जा रहा है? – dangonfast

+0

यदि आप एक बीनकॉन्टेनर का उपयोग करते हैं तो आप कंटेनर पर सेट कर सकते हैं कि संपत्ति सेट आईडीनडप्रॉपर्टी (ऑब्जेक्ट ओ) के साथ आपकी आईडी होनी चाहिए। यदि आप BeanItemContainer का उपयोग करते हैं तो आपको अपनी "पूर्ण" संपर्क वस्तु मिल जाएगी। – nexus

9

समाधान @Charles एंथनी द्वारा दिए गए, मेरे लिए काम नहीं किया तो फिर भी वेबपेज (https://vaadin.com/book/-/page/components.selecting.html) vadin की पुस्तक पर मैं निम्नलिखित कोड मिल गया है।

+0

मैंने यह कोशिश की और यह मेरे लिए काम नहीं करता है, जहां रिक्त स्थान ... –

+0

मैंने अपनी समस्या हल की है, बस सावधान रहें, सेटइटम कैप्शनप्रॉपर्टीआईड का उपयोग न करें, यह किसी भी मैन्युअल सेट इटैम कैप्शन कोड को ओवरराइड करेगा, भले ही सेट इटैम कैप्शन को setItemCaptionPropertyId –

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

के बाद कॉल किया गया हो वास्तव में मददगार, धन्यवाद –

संबंधित मुद्दे