Vaadin 10-上载组件-删除文件事件

Vaadin 10-上载组件-删除文件事件,vaadin,vaadin10,Vaadin,Vaadin10,上载文件时,会启用一个按钮: // myUploadComponent extends Upload myUploadComponent.addSucceededListener(event -> enabledMyButtonMEthod ()); // working well 我不知道如何在删除文件时禁用该按钮(单击文件旁边的十字架) 应该有类似“addRemoveListener”的东西? 如何检测此事件?我将尝试在上触发的公共注册addChangeListener(Upload

上载文件时,会启用一个按钮:

// myUploadComponent extends Upload
myUploadComponent.addSucceededListener(event -> enabledMyButtonMEthod ()); // working well
我不知道如何在删除文件时禁用该按钮(单击文件旁边的十字架)

应该有类似“addRemoveListener”的东西?
如何检测此事件?

我将尝试在上触发的公共注册addChangeListener(Upload.changeStener)我将尝试在上触发的公共注册addChangeListener(Upload.changeStener)您可以收听“文件删除”上载组件中的事件。这里有一个例子

@Route("")
public class MainView extends VerticalLayout {

    public MainView() { 
        MyUpload upload = new MyUpload();
        upload.addFileRemoveListener(e -> Notification.show("Button disabled"));
        add(upload);
    }

    class MyUpload extends Upload {
        Registration addFileRemoveListener(ComponentEventListener<FileRemoveEvent> listener) {
            return super.addListener(FileRemoveEvent.class, listener);
        }
    }

    @DomEvent("file-remove")
    public static class FileRemoveEvent extends ComponentEvent<Upload> {
        public FileRemoveEvent(Upload source, boolean fromClient) {
            super(source, fromClient);
        }
    }
}
@Route(“”)
公共类主视图扩展了垂直布局{
公共主视图(){
MyUpload upload=新建MyUpload();
upload.addFileRemoveListener(e->Notification.show(“按钮禁用”);
添加(上传);
}
类MyUpload扩展了Upload{
注册AddFileRemovelListener(ComponentEventListener侦听器){
返回super.addListener(FileRemoveEvent.class,listener);
}
}
@DomEvent(“文件删除”)
公共静态类FileRemoveEvent扩展ComponentEvent{
公共FileRemoveEvent(上载源,布尔值来自客户端){
超级(来源,来自客户);
}
}
}
您可以在上载组件中侦听“文件删除”事件。这里有一个例子

@Route("")
public class MainView extends VerticalLayout {

    public MainView() { 
        MyUpload upload = new MyUpload();
        upload.addFileRemoveListener(e -> Notification.show("Button disabled"));
        add(upload);
    }

    class MyUpload extends Upload {
        Registration addFileRemoveListener(ComponentEventListener<FileRemoveEvent> listener) {
            return super.addListener(FileRemoveEvent.class, listener);
        }
    }

    @DomEvent("file-remove")
    public static class FileRemoveEvent extends ComponentEvent<Upload> {
        public FileRemoveEvent(Upload source, boolean fromClient) {
            super(source, fromClient);
        }
    }
}
@Route(“”)
公共类主视图扩展了垂直布局{
公共主视图(){
MyUpload upload=新建MyUpload();
upload.addFileRemoveListener(e->Notification.show(“按钮禁用”);
添加(上传);
}
类MyUpload扩展了Upload{
注册AddFileRemovelListener(ComponentEventListener侦听器){
返回super.addListener(FileRemoveEvent.class,listener);
}
}
@DomEvent(“文件删除”)
公共静态类FileRemoveEvent扩展ComponentEvent{
公共FileRemoveEvent(上载源,布尔值来自客户端){
超级(来源,来自客户);
}
}
}

我扩展了Tulio的解决方案,以在FileRemoveEvent中获得删除的文件名。非常方便

private class MyUpload extends Upload {
    public MyUpload(MultiFileMemoryBuffer buffer) {super(buffer);}

    Registration addFileRemoveListener(ComponentEventListener<FileRemoveEvent> listener) {
        return super.addListener(FileRemoveEvent.class, listener);
    }
}

@DomEvent("file-remove")
public static class FileRemoveEvent extends ComponentEvent<Upload> {
    private String fileName;

    public FileRemoveEvent(Upload source, boolean fromClient, @EventData("event.detail.file.name") JreJsonString fileNameJson) {
        super(source, fromClient);
        fileName = fileNameJson.getString();
    }

    public String getFileName() {
        return fileName;
    }
}
私有类MyUpload扩展了Upload{
公共MyUpload(多文件存储器缓冲区){super(缓冲区);}
注册AddFileRemovelListener(ComponentEventListener侦听器){
返回super.addListener(FileRemoveEvent.class,listener);
}
}
@DomEvent(“文件删除”)
公共静态类FileRemoveEvent扩展ComponentEvent{
私有字符串文件名;
public FileRemoveEvent(上传源代码,boolean fromClient,@EventData(“event.detail.file.name”)JreJsonString fileNameJson){
超级(来源,来自客户);
fileName=fileNameJson.getString();
}
公共字符串getFileName(){
返回文件名;
}
}

我扩展了Tulio的解决方案,以在FileRemoveEvent中获得删除的文件名。非常方便

private class MyUpload extends Upload {
    public MyUpload(MultiFileMemoryBuffer buffer) {super(buffer);}

    Registration addFileRemoveListener(ComponentEventListener<FileRemoveEvent> listener) {
        return super.addListener(FileRemoveEvent.class, listener);
    }
}

@DomEvent("file-remove")
public static class FileRemoveEvent extends ComponentEvent<Upload> {
    private String fileName;

    public FileRemoveEvent(Upload source, boolean fromClient, @EventData("event.detail.file.name") JreJsonString fileNameJson) {
        super(source, fromClient);
        fileName = fileNameJson.getString();
    }

    public String getFileName() {
        return fileName;
    }
}
私有类MyUpload扩展了Upload{
公共MyUpload(多文件存储器缓冲区){super(缓冲区);}
注册AddFileRemovelListener(ComponentEventListener侦听器){
返回super.addListener(FileRemoveEvent.class,listener);
}
}
@DomEvent(“文件删除”)
公共静态类FileRemoveEvent扩展ComponentEvent{
私有字符串文件名;
public FileRemoveEvent(上传源代码,boolean fromClient,@EventData(“event.detail.file.name”)JreJsonString fileNameJson){
超级(来源,来自客户);
fileName=fileNameJson.getString();
}
公共字符串getFileName(){
返回文件名;
}
}

我添加了事件监听器,如下所示

上传
.getElement()
.addEventListener(
“文件删除”,
活动->{
JsonObject eventData=event.getEventData();
String fileName=eventData.getString(“event.detail.file.name”);
// ...
}).addEventData(“event.detail.file.name”);

在这里找到了解决方案:

我添加了事件监听器,如下所示

上传
.getElement()
.addEventListener(
“文件删除”,
活动->{
JsonObject eventData=event.getEventData();
String fileName=eventData.getString(“event.detail.file.name”);
// ...
}).addEventData(“event.detail.file.name”);
在此处找到解决方案: