2013-02-15 15 views
5

ho una casella combinata Vaadin che viene riempito con un containerdatasourcel'aggiunta di testo a una casella combinata con un DataSource

setContainerDataSource(container); 

Ora voglio inserire un testo statico da qualche parte nella lista dei risultati.


Ad esempio:

una casella combinata che viene riempito con un contenitore di e la prima voce che compare nella lista dei risultati è una sorta di intestazione:

Persone:
Thomas S .
Lucas B.
Alex X.

posso raggiungere che sia la manipolazione del contenitore o il com bobox?

Ho appena provato a impostare l'origine contenitore e aggiungere una stringa/etichetta tramite addItem() al ComboBox, ma non sembra funzionare. Sono un po 'nuovo per questo, quindi non so come continuare.

+0

Potrebbe essere utile se hai postato ciò che hai provato o ricercato finora. –

+0

ho appena provato a impostare l'origine contenitore e aggiungere una stringa/etichetta tramite addItem() al ComboBox, ma sembra non funzionare. Sono un po 'nuovo per questo, quindi non so come continuare. – luuksen

risposta

0

Si dovrebbe fare la modifica nel contenitore (ad esempio: aggiungere elementi ...) e chiamare setContainerDataSource (contenitore) di nuovo sulla casella combinata (in modo che venga propagato al client).

+0

ha provato anche io un container pieno di persone e provato container.addItem (new Sring ("test")); "test" non verrà mostrato nella lista, ma il resto del contenitore lo farà. – luuksen

+0

per favore aggiungi il tuo codice nel testo della domanda ... –

2

Se il codice è simile a questo:

BeanItemContainer<Person> container = new BeanItemContainer<Person>(Person.class); 
container.addAll(myPersonList); 
ComboBox combobox = new ComboBox(); 
combobox.setContainerDataSource(container); 
combobox.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY); 
combobox.setItemCaptionPropertyId("name"); // the person's name field will be shown on the UI 

// imho if you want to add a static text (String) into a container 
// which populated with Person objects then you have to make a fake Person object 
Person staticText = new Person(); 
staticText.setName("My static text"); 
combobox.addItem(staticText); 
// if you want to specify the index of the item, add them one by one in for cycle 
// and insert the static text item in the appropritate place 
6

Se si utilizza il ComboBox come immediato e non si desidera che la "Persona:" per essere trattati come una persona reale, è possibile utilizzare setNullSelectionItemId a definire la persona falsa come un vero oggetto fittizio. Questa soluzione, tuttavia, ha la limitazione che è possibile aggiungere solo un oggetto fittizio.

Ecco il mio esempio che aggiunge "Persona:" in cima all'elenco e lo gestisce come valore nullo. Nota che sto usando Vaadin 7.

import com.vaadin.data.Property; 
import com.vaadin.data.Property.ValueChangeEvent; 
import com.vaadin.data.util.BeanItemContainer; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.ui.AbstractSelect; 
import com.vaadin.ui.ComboBox; 
import com.vaadin.ui.Notification; 
import com.vaadin.ui.UI; 
import com.vaadin.ui.VerticalLayout; 

/** 
* The Application's "main" class 
*/ 
@SuppressWarnings("serial") 
public class MyVaadinUI extends UI { 

    @Override 
    protected void init(VaadinRequest request) { 
     final VerticalLayout layout = new VerticalLayout(); 
     layout.setMargin(true); 
     setContent(layout); 

     BeanItemContainer<Person> container = new BeanItemContainer<Person>(Person.class); 
     Person nullPerson = new Person(0, "Person:"); 
     container.addBean(nullPerson); 
     container.addBean(new Person(1, "Django")); 
     container.addBean(new Person(2, "Schultz")); 

     ComboBox combobox = new ComboBox(); 
     combobox.setImmediate(true); 
     combobox.setNullSelectionItemId(nullPerson); // Define the null person as a dummy. 
     combobox.setContainerDataSource(container); 
     combobox.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY); 
     combobox.setItemCaptionPropertyId("name"); // the person's name field will be shown on the UI 
     combobox.addValueChangeListener(new Property.ValueChangeListener() { 
      @Override 
      public void valueChange(ValueChangeEvent event) { 
       // Will display 'null selected' when nullPerson is selected. 
       Notification.show(event.getProperty().getValue() + " selected"); 
      } 
     }); 

     layout.addComponent(combobox); 
    } 
} 
+0

Ottimo ma mi piacerebbe sapere come ottenere l'id della persona come risultato – Bourkadi

Problemi correlati