Ошибка при работе с файлом в InputDialog

Здравствуйте, коллеги, подскажите, пожалуйста, в чём проблема.

Пишу следующий код

    dialogs.createInputDialog(this)
            .withCaption("Тест загрузки файла")
            .withParameters(InputParameter.fileParameter("inputFile"))
            .withCloseListener(closeEvent->{
                FileDescriptor fileDescriptor = closeEvent.getValue("inputFile");
                fileUploadingAPI.getFile(fileDescriptor.getUuid()).canRead();
            })
            .show();

После выбора файла и нажатия кнопки OK получаю NullPointer, поскольку fileUploadingAPI возвращает Null. Вместо getUuid пробовал getId, разницы нет. Предварительный анализ проблемы показал, что проблема в том, что в хранилище, доступной через fileUploadingAPI.tempFiles файл записывается с одним Id, а в even.getValule приходит дескриптор файла с совсем другим ID.

Скажите, пожалуйста, это я что-то неправильно делаю, или это ошибка системы?(склоняюсь ко второму)

Можно, конечно, свой диалог написать, но если бы не эта ошибка, то меня и стандартный бы устроил.

Спасибо.

Добрый день!

FileDescriptor#getUuid() не соответствует id файла загруженного во временное хранилище. Чтобы получить такой fileId, нужно использовать FileUploadField#getFileId(). Тогда с InputDialog получится следующее:

InputDialog inputDialog = dialogs.createInputDialog(this)
        .withCaption("Тест загрузки файла")
        .withParameters(InputParameter.fileParameter("inputFile"))
        .show();

inputDialog.addAfterCloseListener(afterCloseEvent -> {
    FileUploadField field = (FileUploadField) inputDialog.getWindow().getComponentNN("inputFile");
    if (field.getFileId() != null) {
        notifications.create(Notifications.NotificationType.TRAY)
                .withCaption("Can read file: " + fileUploadingAPI.getFile(field.getFileId()).canRead())
                .show();
    }
});

Возможно стоит добавить дополнительную информацию в Event, завёл тикет для обсуждения: cuba-platform/cuba#3135.

1 симпатия

Роман, спасибо за информацию!