私は既存のすべてのリスナーを試しましたが、誰もこのタイプのイベントをキャッチできません。
Button uploadButton = new Button("Choose a file");
uploadButton.setDisableOnClick(true);
Upload upload = new Upload();
upload.setUploadButton(uploadButton);
ユーザーがuploadButtonをクリックすると、ボタンが無効になります。次に、システムでファイルを選択ダイアログで、ユーザーはファイルを選択する代わりに[キャンセル]ボタンをクリックします。ダイアログが閉じられ、イベントは発生せず、uploadButtonは引き続き無効になっています。[キャンセル]ボタンが押されたときにイベントをキャッチして、uploadButtonを有効にしたい。
表示された動作を確認できます。ユーザーがファイルピッカーダイアログをキャンセルしても、イベントは発生しないようです。
これはVaadin14.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 );
}
}
私はこの振る舞いを特徴だと考えています。ユーザーがボタンをクリックしてファイルを選択したが、その選択を完了する前にキャンセルした場合、実際には何も起こりません。アップロードは試行されていません。したがって、イベントが発生したことはないため、イベントは発生しません。
おそらく、質問を編集して、アップロードするファイルの選択についてユーザーが気が変わったことを検出することに関心があることを説明する必要があります。おそらく、あなたの究極の目標に対するより良い解決策があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加