Vaadin:如何将验证设置为false以从侦听器形成

时间:2019-02-26 07:42:15

标签: java vaadin

我有一个表单和一些文本字段:

TextField taxNumber = new TextField();
taxNumber.setPrefixComponent(VaadinIcon.BARCODE.create());
accountApplicationBinder
    .forField(taxNumber)
    .withValidator(new StringLengthValidator(....

我在侦听器中有一些验证逻辑:

taxNumber.addBlurListener(event -> {
   String localResult = "";

   InfoResult ir = ks.loadInfo(taxNumber.getValue()); 
   if ((ir.errorText == null) && (!ir.name.isEmpty())) { 
      ...
   } else {
      localResult = "";
      taxNumber.setInvalid(true);
      taxNumber.setErrorMessage("Not valid tax - " + accountApplicationBinder.isValid());
   }
   taxNumberStatusLabel.setText(localResult);
});

我想在提交按钮侦听器中得到类似“ .withValidator ...返回无效”的行为。换句话说:我想让我的提交按钮不起作用,然后taxNumber.addBlurListener返回无效的结果。我该怎么做?

1 个答案:

答案 0 :(得分:1)

在我看来,当您使用.withValidator(new StringLengthValidator())绑定字段时,模糊侦听器中的逻辑将复制您已经设置的验证。验证程序应该做到这一点。 当您单击提交按钮时,您要做的就是验证活页夹,如果它无效,则不要提交。您可以通过在StringLengthValidator中提供自定义的字符串来自定义在taxNumber字段下显示的错误字符串:

.withValidator(new StringLengthValidator("Not valid tax", 4, null))

我刚刚意识到您可能在ks.loadInfo(taxNumber.getValue())中进行了自定义验证。如果是这样,那么最好的方法是用您可以编写的自定义验证器替换StringLengthValidator,例如这样

.withValidator(taxNr -> {
    InfoResult ir = ks.loadInfo(taxNr);
    return ir.errorText == null && !ir.name.isEmpty();
}, "Not valid tax")