2011-11-30 3 views
1

Я новый пользователь Vaadin с фоном JSF. В настоящее время я пытаюсь реализовать простую комбинацию с помощью vaadin.Что я хочу сделать, используя List в качестве списка элементов combobox, показывая поле Example.description в combobox, и когда один из выбранных элементов получает объект Example/Example.id как значение. (как и в JSF с использованием itemLabel = example.description, itemValue = example/example.id свойства f : selectItems)vaadin combobox item label и значение item

+0

В настоящее время идентификаторы объектов показаны в поле со списком ([email protected]) – sogukk

ответ

10

Это Ville из команды Ваадин. Вы можете сделать это довольно много, но в целом вы переключаете свой режим ComboBox с помощью метода setItemCaptionMode () ().

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

public class Example { 

    private Integer id; 
    private String description; 

    public Example(Integer id, String description) { 
     this.id = id; 
     this.description = description; 
    } 

    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description = description; 
    } 
} 

@Override 
public void init() { 
    Window mainWindow = new Window("Combobox Application"); 

    List<Example> examples = new ArrayList<Example>(); 
    examples.add(new Example(new Integer(1), "First description")); 
    examples.add(new Example(new Integer(2), "Second description")); 
    examples.add(new Example(new Integer(3), "Third description")); 
    BeanItemContainer<Example> objects = new BeanItemContainer(Example.class, examples); 

    ComboBox combo = new ComboBox("Example", objects); 
    combo.setItemCaptionPropertyId("description"); 

    mainWindow.addComponent(combo); 
    setMainWindow(mainWindow); 
} 

Здесь BeanItemContainer оборачивает свои POJO, и использует отражение для доступа к добытчиками.

Cheers.

+0

Привет, Ville, спасибо за чистое объяснение. – sogukk

0

Я также новичок в vaadin, поэтому я не могу предоставить вам хорошее решение, но вы можете попробовать и использовать некоторый объект-обертку для каждой записи и переопределить метод toString(), чтобы распечатать название города.

Кроме того, вы можете попробовать использовать BeanContainer<String, City> в качестве источника данных для этого списка. Строкой будет имя/id города.

0

Существует более элегантный способ для класса Enum:

public enum Planet { 
    MERCURY, 
    VENUS, 
    EARTH, 
    MARS, 
    JUPITER, 
    SATURN, 
    URANUS, 
    NEPTUNE, 
    PLUTO; 
    public String getCaption(){ 
     return name(); 
    } 
    public int getId(){ 
     return ordinal(); 
    } 
} 

BeanContainer<Integer, Planet> container = new BeanContainer<>(Planet.class); 
container.setBeanIdProperty("id"); 
container.addAll(EnumSet.allOf(Planet.class)); 

ComboBox planet = new ComboBox("Planet", container); 
planet.setItemCaptionPropertyId("caption"); 

Autor: Андрис Лапиньш

https://vaadin.com/forum/#!/thread/280467/280466