Java Vaadin 7组合框渲染
因此,我在使用Vaadin 7和ComboBox组件时遇到了一些奇怪的行为。本质上,当它第一次呈现表单时,它似乎既没有选择空选择,也没有选择任何添加的项 我尝试用以下代码重新创建此行为,这说明了问题所在Java Vaadin 7组合框渲染,java,vaadin,vaadin7,Java,Vaadin,Vaadin7,因此,我在使用Vaadin 7和ComboBox组件时遇到了一些奇怪的行为。本质上,当它第一次呈现表单时,它似乎既没有选择空选择,也没有选择任何添加的项 我尝试用以下代码重新创建此行为,这说明了问题所在 @Override protected void init(VaadinRequest request) { final FieldGroup binder; FormLayout form = new FormLayout(); form.setMargin(tru
@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);
}
默认情况下,组合框将allow null selection设置为true。因此有一个空白条目,它表示空值选择。但是,首次呈现时组合框的值既不表示空选择,也不表示其中一个项,而是一个空字符串
因此,当我加载表单并单击按钮时,结果既不是失败,这应该是因为我还没有选择任何内容,也没有选择任何内容
这在更高级的UI应用程序中给我带来了一个问题,但在这里发生的事情非常相似
有人能告诉我这里发生了什么事吗
非常感谢,
乔
因此,当我加载表单并单击按钮时,结果既不是
失败,应该是因为我还没有选择任何东西,
也不是我的选择之一
Combobox并不像您想象的那样是空的。它具有默认属性值,您可以将其设置为空字符串:
fields.addItemProperty("country", new ObjectProperty<String>(""));
因此,表单通过验证,因为空字符串也是一个值和空字符串!=空
更改此行:
fields.addItemProperty("country", new ObjectProperty<String>(""));
致:
fields.addItemProperty("country", new ObjectProperty<String>(null, String.class));
box.setNullRepresentation("-- Select Country --");