Почему EmailValidator не дает сбой при пустом значении TextFields?

Я пытаюсь проверить TextField на действительный адрес электронной почты и потерпеть неудачу, если введенный String является недопустимым адресом или просто пустым.

Как указано в документации по API, проверка должна завершиться ошибкой, если Значение 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.


person dajood    schedule 01.06.2014    source источник


Ответы (1)


Сначала вам лучше создать свои формы, привязав поля к элементам . В этом случае биндер перехватывает исключение из EmailValidator и помечает TextField ошибкой после commit().

Во-вторых, если вы наводите указатель на 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);
}

как пример. И выглядит лучше индикатора и всегда работает.

person Yury Morozov    schedule 01.06.2014