Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin 7组合框渲染_Java_Vaadin_Vaadin7 - Fatal编程技术网

Java Vaadin 7组合框渲染

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

因此,我在使用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);
}
默认情况下,组合框将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 --");