ファイルアップロードのエラー
複数ファイルのアップロードでエラー(配列にアノテーションはつけられない?)
watawata日記
この話ですが、確かにエラーになりますね。
チュートリアルでリクエストパラメータのキャプチャを採ると、以下のようになっています。3つのボックスの最初の2つにアップロードした例。
-----------------------------121352813313943 Content-Disposition: form-data; name="formFile"; filename="aaa.txt" Content-Type: text/plain aaaaaa -----------------------------121352813313943 Content-Disposition: form-data; name="formFiles[0]"; filename="bbb.txt" Content-Type: text/plain bbbbb -----------------------------121352813313943 Content-Disposition: form-data; name="formFiles[1]"; filename="" Content-Type: application/octet-stream
つまりformFiles[1]は空で必ず飛んできて、これが配列の2番目に空ファイル名&サイズゼロバイトで入るので問題のエラーになります。
これ、以前にS2Strutsだったか、Struts1.0.2+commons fileuploadだったかで経験があります。
そのときの調査結果は忘れてしまいましたが、サイズがゼロバイトのときはアップロードされていないものとみなす、という処理を追加した記憶があります。つまりValidatorに頼らずに、得られたFormFileをつど検査するイメージ。
for (FormFile file : formFiles) { if (file.getFileSize() > 0) { upload(file, messages); } }
SAStrutsの今回もそうすれば動くと思いますが、根本的にそれでよかったかどうかちょっと自信はないです。
4/1追記:出勤途中携帯で確認したら、wyukawaさんの指摘は最初のボックスだけ指定時でしたね。別件かも