vaadin combobox элемент label и значение элемента - PullRequest
1 голос
/ 30 ноября 2011

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

Ответы [ 4 ]

10 голосов
/ 30 ноября 2011

это Вилле из команды Ваадинов.Вы можете сделать это разными способами, но в целом вы переключаете поведение 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 и использует отражение для доступа к получателям.

Ура.

0 голосов
/ 31 июля 2018

С vaadin 8 / java 8 вы можете использовать:

ComboBox combo = new ComboBox («Пример», объекты);

combo.setItemCaptionGenerator (пример -> пример.getDescription ());

0 голосов
/ 10 апреля 2016

Для класса 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

0 голосов
/ 30 ноября 2011

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

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

...