2013-02-15 16 views
5

Mam combobox Vaadin, który jest wypełniony containerdatasourcedodawanie tekstu do combobox ze źródłem danych

setContainerDataSource(container); 

Teraz chcę, aby wstawić tekst statyczny gdzieś na liście wyników.


Na przykład:

ComboBox, który jest wypełniony pojemnika i pierwszego wejścia, które pojawia się na liście wyników jest jakiś rodzaj nagłówka:

Osób:
Thomas S .
Lucas B.
Alex X.

że mogę osiągnąć albo przez manipulowanie pojemnik lub com bobox?

Po prostu próbowałem ustawić źródło kontenera i dodać ciąg/etykietę przez addItem() do ComboBox, ale to nie działa. Jestem trochę nowy, więc nie wiem, jak kontynuować.

+0

To może pomóc, jeśli opublikowałeś to, co wypróbowałeś lub do tej pory sprawdziłeś. –

+0

Właśnie próbowałem ustawić źródło kontenera i dodać String/Label przez addItem() do ComboBox, ale to nie wydaje się działać. Jestem trochę nowy, więc nie wiem, jak kontynuować. – luuksen

Odpowiedz

0

Powinieneś wykonać zmianę w kontenerze (na przykład: dodać elementy ...) i ponownie wywołać setContainerDataSource (container) na combobox (tak, aby był propagowany do klienta).

+0

próbowałem tego również, mam kontener wypełniony osobami i wypróbowany container.addItem (new Sring ("test")); "test" nie pojawi się na liście, ale reszta kontenera. – luuksen

+0

proszę dodać swój kod do tekstu pytania ... –

2

Jeśli kod jest podobny do tego:

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

Jeśli używasz ComboBox jako natychmiastowe i nie chce się „osoba:” być traktowany jako rzeczywistą osobę, można użyć do setNullSelectionItemId Zdefiniuj fałszywą osobę jako prawdziwy obojętny obiekt. To rozwiązanie ma jednak ograniczenie, że można dodać tylko jeden fałszywy obiekt.

Oto mój przykład, który dodaje "Person:" na górze listy i obsługuje go jako wartość pustą. Zauważ, że używam 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

Świetnie, ale chciałbym wiedzieć, jak uzyskać identyfikator osoby w wyniku – Bourkadi

Powiązane problemy