发生验证错误时如何向用户显示验证错误消息?
How to show validator error messages to user when validation error occures?
我有以下情况:
我有带有指定错误消息的 DoubleRangeValidator 字段
field.addValidator(新的 DoubleRangeValidator("Salary must be a numeric value.",0d,1000000d));
在“保存”按钮下,我调用了 BeanFieldGroup.commit(),这会引发此类字段中非数值的异常
为了显示错误,我使用这里提到的 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;
}
}
我有以下情况:
我有带有指定错误消息的 DoubleRangeValidator 字段 field.addValidator(新的 DoubleRangeValidator("Salary must be a numeric value.",0d,1000000d));
在“保存”按钮下,我调用了 BeanFieldGroup.commit(),这会引发此类字段中非数值的异常
为了显示错误,我使用这里提到的 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;
}
}