2013-02-15 8 views
5

Ich habe einen Vaadin Combobox, die einen statischen Text gefüllt ist irgendwo in der Liste der Ergebnisse mit einem containerdatasourceText in eine Combobox mit einer Datenquelle Hinzufügen

setContainerDataSource(container); 

ich jetzt eingefügt werden soll.


Zum Beispiel:

A Combobox, die mit einem Behälter und dem ersten Eintrag gefüllt ist, die in der Ergebnisliste erscheint, ist eine Art von Kopf:

Personen:
Thomas S
. Lucas B.
Alex X.

kann ich erreichen, dass der Behälter entweder durch Manipulation oder com Bobox?

Ich habe gerade versucht, die Container-Quelle zu setzen und eine Zeichenfolge/Label über AddItem() zur ComboBox hinzuzufügen, aber das scheint nicht zu funktionieren. Ich bin ein bisschen neu, also weiß ich nicht weiter.

+0

Es könnte helfen, wenn Sie gepostet haben, was Sie bisher versucht oder erforscht haben. –

+0

Ich habe gerade versucht, die Container-Quelle zu setzen und eine Zeichenfolge/Label über AddItem() zur ComboBox hinzuzufügen, aber das scheint nicht zu funktionieren. Ich bin ein bisschen neu, also weiß ich nicht weiter. – luuksen

Antwort

0

Sie sollten die Änderung in dem Behälter (zum Beispiel: Elemente hinzufügen ...) tun und rufen setContainerDataSource (Container) wieder auf der Combobox (so wird es an den Client propagiert).

+0

versuchte das auch, ich habe einen Container mit Personen gefüllt und versucht container.addItem (new Sring ("test")); "test" wird nicht in der Liste angezeigt, aber der Rest des Containers wird. – luuksen

+0

Bitte fügen Sie Ihren Code in den Fragetext ein ... –

2

Wenn Ihr Code auf diese ähnlich ist:

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

Wenn Sie die ComboBox als sofort verwenden und wollen nicht die „Person“ als reale Person behandelt werden, können Sie verwenden, um setNullSelectionItemId Definieren Sie die falsche Person als ein echtes Dummy-Objekt. Diese Lösung hat jedoch die Einschränkung, dass Sie nur ein Dummy-Objekt hinzufügen können.

Hier ist mein Beispiel, das "Person:" oben in der Liste hinzufügt und als Nullwert behandelt. Beachten Sie, dass ich Vaadin 7 verwende.

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

Toll, aber ich würde gerne wissen, wie man die ID der Person als Ergebnis erhalten kann – Bourkadi

Verwandte Themen