问题描述
我有一个绑定到 java 实体模型的表单字段。该模型有一个注释:
@ValidPassword
private String password
它用一些条件验证字段并返回包含每个失败条件的错误消息,以“\n”换行符分隔。
Vaadin 形式通过以下方式连接到此模型:
username = new TextField("Username");
username.addClassName("username-field");
password = new PasswordField("Password");
password.addClassName("password-field");
binder.forField(username ).asrequired().bind("username");
binder.forField(password).asrequired().bind("password");
将输入写入密码字段会导致: image-link 当我希望每个失败的条件都在新行上开始时。
解决方法
如果您想在 Vaadin 8 或类似 Vaadin 14 及更新版本中使用 JSR-303 Bean validation,那么您需要使用 BeanValidationBinder
而不是常规的 Binder
。同样在这种情况下,您不应该使用
binder.forField(password).asRequired().bind("password");
而只是使用
binder.bindInstanceFields(form);
此外,如果您需要自定义错误的显示方式,您可以使用例如 ValidationStatusHandler,每次验证状态从有效变为无效时都会调用它,反之亦然。默认情况下,错误显示在组件中。您可以定义自己的组件,例如Html
,您可以在其中使用丰富的格式。
binder.forField(field).withValidationStatusHandler(handler -> {
if (handler.isError()) {
handler.getMessage().ifPresent(error -> {
Html html = new Html("<span>"+error+"</span>");
layout.add(html);
});
}
}).bind("property");