我有一个表单和一些文本字段:
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返回无效的结果。我该怎么做?
答案 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")