Проверка на ввод неверных значений при инлайн редактировании Table

Добрый день!

Jmix version: 1.6.0
Jmix Studio plugin version: 2.3.3-241
IntelliJ version: IntelliJ IDEA 2024.1.6 (Community Edition)

Имеем:
сущности Order и комозитную OrderLines
Атрибут OrderLines.quantity с типом Double
Экран редактирования Order с редактируемой таблицей OrderLines и редактируемым атрибутом quantity

Проблема: пользователь может ввести в столбец атрибута quantity не числовое значение, при этом рамка поля ввода окрашивается в красный, при этом сохранение экрана срабатывает и сохраняет предыдущее верное значение.
image

Как можно предотвратить ввод неверного значения или выполнить проверку при сохранении?
Пример проекта
tableedit.zip (94.9 КБ)

Добрый день.

В целом, вы можете предотвратить ввод неверного значения создав собственный компонент для ввода. Для этого вам следует убрать свойство editable из XML. И определить quantity как генерируемую колонку.

Вот простой пример, который вы можете модифицировать для вашего случая:

    @Install(to = "linesTable.quantity", subject = "columnGenerator")
    protected Component customerTableFullNameColumnGenerator(OrderLines orderLines) {
        TextField<Double> textField = uiComponents.create(TextField.TYPE_DOUBLE);

        textField.setWidthFull();
        textField.setValueSource(new ContainerValueSource<>(linesTable.getInstanceContainer(orderLines),
                "quantity"));

        textField.addTextChangeListener(textChangeEvent -> {
            try {
                datatypeRegistry.get(Double.class).parse(textChangeEvent.getText());
            } catch (ParseException e) {
                textField.setValue(null);
                notifications.create()
                        .withCaption("Wrong value")
                        .show();
            }
        });

        return textField;
    }

С уважением,
Дмитрий

1 симпатия