Binder 中的 Vaadin Upload 组件,例如编辑器

Vaadin Upload component in Binder, e.g. Crud editor

我有一个 Crud(来自 Vaadin Pro)并且想使用 BinderCrudEditor 中的上传组件。 Upload 组件不存储值(或者更确切地说,缺少 HasValue 接口),所以我不能使用 Binder。有没有什么方法可以以某种方式包含它,而无需在 Crud 中创建一个额外的按钮来上传文件,然后与侦听器一起工作?

最简单的方法可能是使用 Vaadin 框架的 CustomField。您真正需要决定的是 return 类型。此外,根据您选择 return 类型的方式,设置字段的值有点尴尬。因此,因此将其更多地作为伪代码示例。

public class UploadField extends CustomField<InputStream> {

    InputStream is;
    FileBuffer buffer = new FileBuffer();
    
    public UploadField() {
        Upload upload = new Upload(buffer);
        upload.setAcceptedFileTypes("image/jpeg");
        upload.setMaxFiles(1);
        upload.addSucceededListener(event -> {
            is = buffer.getInputStream();
        });

        add(upload);            
    }
    
    public String getFileName() {
        return buffer.getFileName();
    }

    @Override
    protected InputStream generateModelValue() {
        return is;
    }

    @Override
    protected void setPresentationValue(InputStream newPresentationValue) {
    }
    
}