【问题标题】:Vaadin 7 ComboBox renderingVaadin 7 ComboBox 渲染
【发布时间】: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 应用程序中给我造成了问题,但这里发生的事情几乎相同。

谁能告诉我这里发生了什么?

非常感谢,

【问题讨论】:

    标签: java vaadin vaadin7


    【解决方案1】:

    因此,当我加载表单并单击按钮时,结果既不是 失败,应该是因为我还没有选择任何东西, 也不是我的选择之一。

    Combobox 并不像您想象的那样为空。它具有默认属性值,您将其设置为空字符串:

    fields.addItemProperty("country", new ObjectProperty<String>(""));
    

    因此表单通过验证,因为空字符串也是一个值并且空字符串!= null。

    更改此行:

    fields.addItemProperty("country", new ObjectProperty<String>(""));
    

    到:

    fields.addItemProperty("country", new ObjectProperty<String>(null, String.class));
    box.setNullRepresentation("-- Select Country --");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多