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