Problemas con componentes MultiSelectComboBox, CheckBox

Hola, estoy usando MultiselectComboBox, CheckBox en mi formulario con Vaadin 14, la cuestion es que cuando intento editar los datos (hacer seleccion o check), en dichos componentes, el boton “Save” se mantienen deshabilitado como si no se hubiera producido cambio alguno. Me pueden ayudar con este tema. Gracias.

Dany Mendibur:
Hola, estoy usando MultiselectComboBox, CheckBox en mi formulario con Vaadin 14, la cuestion es que cuando intento editar los datos (hacer seleccion o check), en dichos componentes, el boton “Save” se mantienen deshabilitado como si no se hubiera producido cambio alguno. Me pueden ayudar con este tema. Gracias.

Pero muestra algo de codigo. y formateado en lo posible.

Si, te puedo mostrar el codigo, claro. Solo que la duda, es de como seria el mecanismo para notificar al formulario que los datos cambiaron, por lo cual deberia habilitar el “Save”. O sea, el mismo comoportamiento que un campo TextField por ejemplo, el cual funciona correctamente. Ese situacion de error sucede con los fields VComboBox, MultiSelectcomboBox, CheckBox…

Dany Mendibur:
Si, te puedo mostrar el codigo, claro. Solo que la duda, es de como seria el mecanismo para notificar al formulario que los datos cambiaron, por lo cual deberia habilitar el “Save”. O sea, el mismo comoportamiento que un campo TextField por ejemplo, el cual funciona correctamente. Ese situacion de error sucede con los fields VComboBox, MultiSelectcomboBox, CheckBox…

Estas usando un Binder<> ? por casualidad ? es lo tipico a la hora de validar un formulario.

Si, exacto, uso binder. Pero relizo una modificacion en esos campos que te comento y no se habilita el boton save del formulario, como que no se da cuenta del cambio que se realiza. Estuve viendo que existe una diferencia, estos componentes no implementan la interfaz HasValue.

Muestra al menos la clase donde tienes el Binder, hay varias maneras de hacerlo

En este ejemplo no hace falta que habilites el boton save, porque primero valida que todos los campos esten correctos para invocar al metodo calculate(o sea, cuando todo marcha bien)

btnCalculate.addClickListener(e -> {
            if (binder.writeBeanIfValid(persona)) {
                calculate();
            } else {
                final BinderValidationStatus<Persona> validate = binder.validate();
                String errorText = validate.getFieldValidationStatuses()
                        .stream()
                        .filter(BindingValidationStatus::isError)
                        .map(BindingValidationStatus::getMessage)
                        .map(Optional::get)
                        .distinct()
                        .collect(Collectors.joining(", "));
                infoLabel.setText("Errores: " + errorText);
            }
        });

Y faltaria hacer un forField para cada Componente nEdad es un NumberField.

binder.forField(nEdad)
                .withValidator(edad -> edad > 0 && edad <= 120, "Edad incorrecta!")
                .bind(Persona::getEdad,  (e,value)-> {});

Resumiendo es una de tantas maneras, y el boton que validad siempre esta habilitado.