У меня есть форма ввода с комбинированным списком, который отображает целочисленные значения. Я хочу, чтобы пользователь мог добавлять новые целочисленные значения в этот список. Мне нужно проверить, являются ли ввод только числа (а не буквы) - если это не действительное целое число, я хочу отобразить сообщение об ошибке.
Для текстовых полей я понял это быстро - я получаю сообщение об ошибке даже при вводе «неправильного» ввода! Но я не могу найти решение для комбинированного списка в сочетании с addCustomValueSetListener.
Я использую Vaadin 14.1.21 и Java JDK + JRE 1.8.
Прямо сейчас, если я введу пользовательское значение с буквами, я не получаю сообщение об ошибке, отображаемое под полем, и оно просто молча игнорирует входное значение, когда я хочу «сохранить» его / сохранить в базе данных.
public class MyForm extends Div {
private TextField tf;
tf =new TextField("TF");
tf.setWidth("100%");
tf.setRequired(true);
tf.addThemeVariants(TextFieldVariant.LUMO_ALIGN_RIGHT);
tf.setValueChangeMode(ValueChangeMode.EAGER);
private ComboBox<Integer> combo_int;
combo_int= new ComboBox<>();
combo_int.setItems(114, 12383, 65432189);
combo_int.setLabel("Some ID");
combo_int.addCustomValueSetListener(
event -> combo_int.setValue(Integer.parseInt(event.getDetail()))
// since I need to parse new values here, I cannot use a validator upon binding
);
binder = new BeanValidationBinder<>(MyData.class);
binder.forField(tf)
.withNullRepresentation("")
.withConverter(new StringToIntegerConverter("needs to be integer!"))
.bind("tf_data_integer");
binder.forField(combo_int)
.bind("integer_data");
}