Vaadin 为什么';EmailValidator是否在TextFields空值上失败?

Vaadin 为什么';EmailValidator是否在TextFields空值上失败?,vaadin,vaadin7,Vaadin,Vaadin7,我正在尝试验证一个TextField以传递有效的电子邮件地址,如果输入的字符串是无效地址或只是空的,则验证失败 如中所述,如果TextFields值为空,只要其required属性设置为true,验证就会失败 因此,我使用以下代码进行了尝试: //TextField as part of a signup form. flSignupForm is an instance of FormLayout TextField tfEmail=new TextField("Email"); tfEmai

我正在尝试验证一个
TextField
以传递有效的电子邮件地址,如果输入的
字符串是无效地址或只是空的,则验证失败

如中所述,如果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);
我得到的是一个例外,但如果没有写入任何内容,我希望在
文本字段前面有一个小红色标记,就像输入的地址无效时一样。我能换什么


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

首先,您最好通过以下方式创建表单。在这种情况下,binder从EmailValidator捕获一个exeption,并在提交()后将TextField标记为error

第二,如果将指针移到TextField上,看到一个弹出错误,但组件看起来相同,这意味着TextField没有容器。这是因为您应该在任何容器中包装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);
}
例如。它看起来比指示器更好,而且总是有效的