我不想创建验证器,而是希望监听任何验证错误,以便我可以做一些特别的事情。
例如,假设我有一个DateField
并且用户输入了无效日期,我希望有一个listener
,会在该字段突出显示的同时收到通知由Vaadin红色。我无处不在,无法找到任何类型的验证Listener
或错误通知机制。我可以创建自己的自定义验证器,但这不是我想要做的。我希望收到来自DateField
等已经拥有自己的内置验证器的字段的验证错误的通知。必须有某种方式,因为必须通知某种类型的监听器来更改字段的css值以及在标题中添加问号...
答案 0 :(得分:0)
据我所知,Vaadin验证员没有"听"能力。我假设你想要动态检查日期格式。我注意到的是Vaadin验证员不听,但他们可以在提交时验证输入。由于我无法实现即时输入检查,因此我使用了componentError
。
以下是一个例子:
TextField number = new TextField();
number.addTextChangeListener((FieldEvents.TextChangeEvent event)->{ // Java 8 for lambda
if(!event.getText().matches("[0-9]+")){ // matches function for regexp
number.setComponentError(new UserError("Must be a valid number"));
}
else{
number.setComponentError(null);
}
});
如果用户一直输入无效值,这将收听更改并显示错误。但是,还有一件事要做。默认情况下,textChangeListener
配置为延迟模式。延迟模式要求用户暂停键入以收听更改。您可能想要做的是将聆听模式设置为急切:
number.setTextChangeEventMode(AbstractTextField.TextChangeEventMode.EAGER);
之后,您可以在按钮侦听器中使用getComponentError
以禁止提交错误,如果出现错误,则表示componentError
不为空。
我知道这看起来像是一个肮脏的解决方法,但这对我有用。有一个add-on可以支持热切的验证,但我无法使其正常工作。你可能也想看一下。
就突出显示无效输入而言,componentError
会在显示UserError
的输入字段上呈现一个小的红色感叹号(也取决于您的主题,您应该能够配置它)你把它悬停在它上面。