Wicket のファイルアップロード、じつはドラッグ操作に対応していた。

システム要件で意外とファイルアップロードの要件は少ないもので、今まで気づかなかったのですが、
ドラッグ操作でファイルアップロードする(処理)振る舞いを Wicket-extension は、すでにあったのですね。
wicket-extensions-8.0.0.jar の中にありますね。
今でもそうなのか、<input> タグ type="file" formタグを、method="post" enctype="multipart/form-data" なんて書いて
殆どが、実装しているのでは?

でも、Wicket-extension では、そんなこと書かなくても、
form タグは、<form wicket:id="form"> のままの記述で、<input> タグ type="file" も書かずに、
適当にページデザインで、ドラッグ&ドロップする場所作って、
AjaxFileDropBehavior というビヘビアを書けば、
ファイルをマウスでドラッグ操作すると、勝手にファイルアップロード実行して、サーバサイドで読み込めます。
(サンプル)
まず、これは無くてもいいんですが、現在のファイルアップロード状況をページに表示するテキスト宣言を
グローバル変数 public で持ちます。。

public String filelistText = "";

ファイルアップロード状況のラベルです。グローバル変数 で filelistText を宣言したので、LambdaModel で書きます。
setOutputMarkupId で true にして後から結果を反映させます。

/* ファイルアップロード状態テキスト */
Label filelistTextLabel 
= new Label("uploadfiles_list", LambdaModel.of(()->filelistText, t->{ filelistText = t; }));
filelistTextLabel.setEscapeModelStrings(false);
filelistTextLabel.setOutputMarkupId(true);
queue(filelistTextLabel);

div タグなど、適当スペースのタグにAjaxFileDropBehavior を割り当てます。読み込んでサイズを認識してます。

WebMarkupContainer droparea = new WebMarkupContainer("droparea");
droparea.add(new AjaxFileDropBehavior(){
   protected void onFileUpload(AjaxRequestTarget target, List<FileUpload> files){
      Optional.ofNullable(files).ifPresent(fu->{
         StringBuilder sb = new StringBuilder();
         sb.append("<ul>");
         fu.stream().forEach(file->{
            sb.append("<li>");
            sb.append(file.getClientFileName());
            sb.append("  Size: ");
            sb.append(Bytes.bytes(file.getSize()).toString());
            sb.append(" byte");
            sb.append("</li>");
         });
         sb.append("</ul>");
         filelistText = sb.toString();
         target.add(filelistTextLabel);
      });
   }
   @Override
   protected void onError(AjaxRequestTarget target, FileUploadException fux)   {
      logger.debug(fux.getMessage());
   }
});
queue(droparea);

これだけです。
Wicket は基本ステートフルなので、あとは煮るなり焼くなり好きにします。

さらに、以下のとおり誤った操作でドロップした時の対処も必要、
oboe2uran.hatenablog.com