【发布时间】:2014-04-22 18:31:48
【问题描述】:
所以我在使用 Vaadin 7 和 ComboBox 组件时遇到了一些奇怪的行为。本质上,发生的事情是,当它第一次呈现表单时,它似乎既没有选择空选择,也没有选择任何添加的项目。
我已尝试使用以下代码重新创建此行为,这说明了问题。
@Override
protected void init(VaadinRequest request) {
final FieldGroup binder;
FormLayout form = new FormLayout();
form.setMargin(true);
setSizeFull();
setContent(form);
final Label output = new Label();
form.addComponent(output);
ComboBox box = new ComboBox("My Dropdown");
final PropertysetItem fields = new PropertysetItem();
fields.addItemProperty("country", new ObjectProperty<String>(""));
binder = new FieldGroup(fields);
binder.bind(box, "country");
box.addItem("aus");
box.setItemCaption("aus", "Australia");
box.addItem("uk");
box.setItemCaption("uk", "United Kingdom");
box.setRequired(true);
box.setImmediate(true);
box.setRequiredError("Country is required field");
Button submit = new Button("Submit", new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
try {
binder.commit();
output.setValue((String) fields.getItemProperty("country").getValue());
}
catch (CommitException e) {
Notification.show("fail!");
}
}
});
form.addComponent(box);
form.addComponent(submit);
}
默认情况下,ComboBox 已将允许空选择设置为 true。所以有一个空白条目,它代表一个空值选择。但是,ComboBox 在首次呈现时的值既不代表空选择,也不代表其中一项,而是一个空字符串。
因此,当我加载表单并单击按钮时,结果既不是失败,应该是因为我还没有选择任何东西,也不是我的选择之一。
这在更高级的 UI 应用程序中给我造成了问题,但这里发生的事情几乎相同。
谁能告诉我这里发生了什么?
非常感谢,
乔
【问题讨论】: