为什么EmailValidator在TextFields空值上失败?

时间:2014-06-01 09:31:16

标签: vaadin vaadin7

我正在尝试验证TextField是否要传递有效的电子邮件地址,如果输入的String是无效地址或仅为空,则会失败。

API docs中所述,只要TextFields值为空,验证就会失败,只要其required属性设置为true即可。

所以,我尝试使用以下代码:

//TextField as part of a signup form. flSignupForm is an instance of FormLayout
TextField tfEmail=new TextField("Email");
tfEmail.addValidator(new EmailValidator("The email address isn't valid."));
tfEmail.setRequired(true);
tfEmail.setRequiredError("The email field is required. You'll need it to log in.");
flSignupForm.addComponent(tfEmail);

我得到的是一个例外,但我想在TextField前面得到一个红色标记,如果没有任何内容,就像我输入的地址无效时那样。我能改变什么?

顺便说一下:我正在使用Vaadin 7.2.1。

1 个答案:

答案 0 :(得分:1)

首先,您最好通过Binding Fields to Items创建表单。在这种情况下,binder从EmailValidator捕获一个exeption,并在commit()之后将TextField标记为错误。

第二,如果将指针移到TextField上并看到弹出错误但组件看起来相同,则表示TextField没有容器。这是因为error Indicator (exclamation mark) are actually provided by the layouts containing the component, not the component themselves.你应该将TextField包装在任何容器中。

我通常使用CSS样式以自己的方式标记错误字段。例如,带有错误的TextField具有CSS样式“v-textfield-error”,您可以将新规则定义为

.v-textfield-error  {
    box-shadow: 0 0 6px rgba(256, 0, 0, .5);
    outline: 1px solid rgb(256, 0, 0);
}

例如。它看起来比指标好,而且总是有效。