发生验证错误时如何向用户显示验证错误消息?

How to show validator error messages to user when validation error occures?

我有以下情况:

  1. 我有带有指定错误消息的 DoubleRangeValidator 字段 field.addValidator(新的 DoubleRangeValidator("Salary must be a numeric value.",0d,1000000d));

  2. 在“保存”按钮下,我调用了 BeanFieldGroup.commit(),这会引发此类字段中非数值的异常

  3. 为了显示错误,我使用这里提到的 ErrorUtils class Display error messages directly in Vaadin 7

.. 它只是为所有字段/组件调用 component.getErrorMessage() 并收集所有错误消息。但是 getErrorMessage() 的 DoubleRange 验证器 returns 为 null 的字段因此此处没有可用的错误消息。这同样适用于其他验证器。所以我的问题是在 commit() 期间发生验证错误时如何显示验证器错误消息?

我已尝试使用您提到的 ErrorUtils class 重现您的错误,但 getErrorMessage 方法没有返回 null。也许您创建 BeanFieldGroup and/or Field 的方式有问题。这是我的代码:

@Override
protected void init(VaadinRequest request) {

    BeanFieldGroup<MyBean> bfg = new BeanFieldGroup<>(MyBean.class);
    bfg.setItemDataSource(new MyBean());

    Field<?> salaryField = bfg.buildAndBind("salary");
    salaryField.addValidator(new DoubleRangeValidator("Salary must be a numeric value.", 0d, 1000000d));

    Button commit = new Button("Save", e -> {
        try {
            bfg.commit();
        }
        catch (CommitException ce) {
            ErrorUtils.showComponentErrors(bfg.getFields());
        }
    });

    VerticalLayout hLayout = new VerticalLayout(salaryField, commit);
    setContent(hLayout);
}
public class MyBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private double salary;

    public MyBean() {}

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}