vaadin组合框项目标签和项目值

时间:2011-11-30 09:14:53

标签: java vaadin

我是一个具有JSF背景的新Vaadin用户。目前我正在尝试实现一个简单的 使用vaadin的组合框。我想要做的是,使用List作为组合框的项目列表,在组合框中显示Example.description字段,当选择其中一个项目时,将Example对象/ Example.id作为值。(as我们在JSF中使用itemLabel = example.description,itemValue = example / example.id属性f:selectItems)

3 个答案:

答案 0 :(得分:10)

这是来自Vaadin团队的Ville。您可以通过很多方式执行此操作,但通常可以使用 setItemCaptionMode()方法切换ComboBox行为。

然而,通过以下示例完成了与您尝试做的非常接近的事情:

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并使用反射来访问getter。

干杯。

答案 1 :(得分:0)

我也是vaadin的新手,所以我无法为您提供一个好的解决方案,但您可以尝试每个条目使用一些包装器对象并覆盖toString()方法以打印出来城市名称。

除此之外,您可以尝试使用BeanContainer<String, City>作为该组合框的数据源。该字符串将是城市名称/ id。

答案 2 :(得分:0)

使用vaadin 8 / java 8,您可以使用:

ComboBox组合=新的ComboBox(“ Example”,objects);

combo.setItemCaptionGenerator(example-> example.getDescription());