【问题标题】:Adding new line in error-message for vaadin form validation在错误消息中添加新行以进行 vaadin 表单验证
【发布时间】:2021-02-08 15:56:08
【问题描述】:

我有一个绑定到 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 当我希望每个失败的条件都从新行开始时。

【问题讨论】:

    标签: java forms formatting vaadin android-binder


    【解决方案1】:

    如果您想将 JSR-303 Bean validation 与 Vaadin 8 或类似 Vaadin 14 及更高版本一起使用,则需要使用 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");
    

    【讨论】:

    • 我使用BeanValidationBinder。我将绑定方式更改为binder.bindInstanceFields(form);,但消息格式仍然相同。我收到来自 Passay 验证器的消息,由 '\n' 加入,但它不会在视图中创建新行。如何做到这一点?
    • 好的,感谢您的澄清,我将那部分添加到答案中。
    • 是的,这是某种解决方法,谢谢。有没有办法将该消息插入到密码组件中的&lt;div part="error-message"&gt; 或直接在那里操作它以在适当的位置显示格式化的文本,就像在附加的图像中一样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多