Оказывается, в Vaadin 6.7.8 невозможно валидировать текстовое поле на непустое значение. Можно пометить его как обязательное и тогда, вызывая метод commit этого поля, возникает исключение — com.vaadin.data.Validator.EmptyValueException. При этом, если поле размещается вручную, то визуально ошибку не будет видно. Имеется ввиду, что поле не является частью какой-нибудь стандартной формы фреймворка, типа com.vaadin.ui.Form.
Может это дефект, а может задумка, но как выход можно показать сообщение об ошибке в заранее определенном месте, например так: http://demo.vaadin.com/sampler#FormBasic. Для вывода сообщения можно использовать компонент com.vaadin.ui.Label. Вызов метода commit нашего поля надо поместить в блок try-catch. При возникновении исключения EmptyValueException вручную задать сообщение об ошибке используя метод setComponentError компонента label. Можно также добавить логику, которая покажет label с сообщением, когда произойдет ошибка, а в любом другом случае — скроет его.
Небольшой пример:
Может это дефект, а может задумка, но как выход можно показать сообщение об ошибке в заранее определенном месте, например так: http://demo.vaadin.com/sampler#FormBasic. Для вывода сообщения можно использовать компонент com.vaadin.ui.Label. Вызов метода commit нашего поля надо поместить в блок try-catch. При возникновении исключения EmptyValueException вручную задать сообщение об ошибке используя метод setComponentError компонента label. Можно также добавить логику, которая покажет label с сообщением, когда произойдет ошибка, а в любом другом случае — скроет его.
Небольшой пример:
public class UserForm extends VerticalLayout {
private TextField name;
private Button apply;
private Label error;
public UserForm() {
setSizeFull();
setSpacing(true);
name = new TextField("Name");
name.setRequired(true);
name.setRequiredError("Please enter a valid name");
addComponent(name);
error = new Label();
error.setVisible(false);
addComponent(error);
apply = new Button("Apply");
addComponent(apply);
apply.addListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent event) {
try {
name.commit();
} catch (Validator.InvalidValueException e) {
error.setCaption(e.getMessage());
error.setComponentError(e);
error.setVisible(true);
}
error.setVisible(false);
}
});
}
}
Henri Sara объясняет причину: https://vaadin.com/forum/-/message_boards/view_message/365283