首页 > 解决方案 > Vaadin:如何将验证设置为 false 以从侦听器形成

问题描述

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

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 返回无效的结果。我怎么能这样做?

标签: javavaadin

解决方案


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

.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")

推荐阅读