java - 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 返回无效的结果。我怎么能这样做?
解决方案
在我看来,您在 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")
推荐阅读
- javascript - 方便的“链式”|| (OR) 液体中的表达式
- java - 我什么时候想创建一个实现 Collection(或其子接口之一)的对象
- python-3.x - 你如何让 tkinter 标签中的每个单词成为一个按钮?
- sas - 根据SAS中多个变量的条件创建新变量
- optimizely - 如何让 isFeatureEnabled 为同一组织中的所有用户返回相同的值?
- javascript - 离子标签不会转到下一页
- logstash - Logstash 无法运行
- php - 如何使用mysql insert 插入特殊字符?
- r - 如何在 R 的数据集中的列中生成所有可能的配对?
- python - h2o 服务器与本地 PC 断开连接