Vaadin 14 Upload - как перехватить событие, когда пользователь нажимает кнопку «Отмена» в диалоге выбора файла. - PullRequest
0 голосов
/ 30 марта 2020

Я перепробовал всех существующих слушателей, но никто не может поймать событие такого типа.

Button uploadButton = new Button("Choose a file");
uploadButton.setDisableOnClick(true);
Upload upload = new Upload();
upload.setUploadButton(uploadButton);

Пользователь нажимает кнопку загрузки, кнопка теперь отключена. Затем в диалоговом окне выбора файла пользователь нажимает кнопку «Отмена» вместо выбора файла. Диалог закрыт, событие не запускается, кнопка загрузки по-прежнему отключена. Я хочу перехватить событие, когда нажата кнопка «Отмена», и включить uploadButton.

1 Ответ

0 голосов
/ 31 марта 2020

Поведение подтверждено

Я могу подтвердить поведение, которое вы видели: Кажется, что никакие события не запускаются, когда пользователь отменяет диалог выбора файлов.

Вот пример приложения в Vaadin 14.1.21. Я добавил слушателей для нескольких типов событий.

package work.basil.example;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.upload.*;
import com.vaadin.flow.component.upload.receivers.MemoryBuffer;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.PWA;

import java.time.Instant;

/**
 * The main view contains a button and a click listener.
 */
@Route ( "" )
@PWA ( name = "Project Base for Vaadin", shortName = "Project Base" )
@CssImport ( "./styles/shared-styles.css" )
@CssImport ( value = "./styles/vaadin-text-field-styles.css", themeFor = "vaadin-text-field" )
public class MainView extends VerticalLayout
{

    public MainView ( )
    {
        MemoryBuffer buffer = new MemoryBuffer();
        Upload upload = new Upload( buffer );

        upload.addStartedListener( ( StartedEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addSucceededListener( ( SucceededEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addFinishedListener( ( FinishedEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addAllFinishedListener( ( AllFinishedEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addProgressListener( ( ProgressUpdateEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addFileRejectedListener( ( FileRejectedEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addFailedListener( ( FailedEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );

        upload.addFileRejectedListener( ( FileRejectedEvent event ) -> System.out.println( event.getClass().getCanonicalName() + " happened " + Instant.now() ) );


        this.add( upload );
    }
}

Функция, а не ошибка

Я считаю это поведение функцией. Если пользователь нажимает кнопку, чтобы выбрать файлы, но отменяет ее до завершения этого выбора, на самом деле ничего не произошло. Загрузка не была предпринята. Таким образом, ни одно событие не должно запускаться, поскольку ничего особенного не произошло.

Возможно, вам следует отредактировать свой Вопрос, чтобы объяснить свою заинтересованность в обнаружении пользователя, который передумал выбирать файлы для загрузки. Возможно, есть лучшее решение для вашей конечной цели.

...