Vaadin有验证听众吗?

时间:2015-07-23 05:01:25

标签: java vaadin vaadin7

我不想创建验证器,而是希望监听任何验证错误,以便我可以做一些特别的事情。

例如,假设我有一个DateField并且用户输入了无效日期,我希望有一个listener,会在该字段突出显示的同时收到通知由Vaadin红色。我无处不在,无法找到任何类型的验证Listener或错误通知机制。我可以创建自己的自定义验证器,但这不是我想要做的。我希望收到来自DateField等已经拥有自己的内置验证器的字段的验证错误的通知。必须有某种方式,因为必须通知某种类型的监听器来更改字段的css值以及在标题中添加问号...

1 个答案:

答案 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的输入字段上呈现一个小的红色感叹号(也取决于您的主题,您应该能够配置它)你把它悬停在它上面。