2013-02-15 3 views
5

У меня есть Vaadin выпадающий, который заполняется с containerdatasourceдобавление текста к выпадающий список с источником данных

setContainerDataSource(container); 

теперь я хочу, чтобы вставить статический текст где-то в списке результатов.


Например:

выпадающих, который заполняется с контейнером и первой записью, которая появляется в списке результатов является своим родом заголовок:

Лицо:
Thomas S .
Lucas B.
Alex X.

Могу ли я достичь, либо манипулируя контейнер или ком bobox?

Я просто попытался установить источник контейнера и добавить String/Label через addItem() в ComboBox, но это, похоже, не работает. Я новичок в этом, поэтому я не знаю, как продолжить.

+0

Это может помочь, если вы разместите то, что вы пробовали или исследовали до сих пор. –

+0

Я просто попытался установить источник контейнера и добавить String/Label через addItem() в ComboBox, но это, похоже, не работает. Я новичок в этом, поэтому я не знаю, как продолжить. – luuksen

ответ

0

Вы должны внести изменения в контейнер (например: добавить элементы ...) и снова вызвать setContainerDataSource (контейнер) снова в поле со списком (чтобы оно распространилось на клиент).

+0

попробовал, что у меня есть контейнер , заполненный людьми и попробованный container.addItem (новый Sring («test»)); «Тест» не будет отображаться в списке, но остальная часть контейнера будет. – luuksen

+0

, пожалуйста, добавьте свой код в текст вопроса ... –

2

Если ваш код похож на этот:

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

Если вы используете ComboBox как немедленные и не хотите «лица:» быть обработана как реальный человек, вы могли бы использовать setNullSelectionItemId для определите поддельного человека как истинный объект-манекен. Однако это решение имеет ограничение, что вы можете добавить только один фиктивный объект.

Вот мой пример, который добавляет «Лицо:» вверху списка и обрабатывает его как нулевое значение. Обратите внимание, что я использую 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

Отлично, но я хотел бы знать, как получить идентификатор человека в результате – Bourkadi