1.0.2-rc1
SAStruts 1.0.2-rc1までの最近の変更点へキャッチアップするために、追加機能をメモします。
SASTRUTS-29 複数のファイルアップロードへの対応
ドキュメント内の対応箇所:機能リファレンス内の「アクション」付近。
アップロードに関して補足を書いてみます。
推敲できる状態ではないので、とりあえずメモベース。
なお d:id:kuwalab:20080127 を参考にさせていただきました。
細かいけれど、RFCに関しては蛇足かもしれません。
ファイルアップロード機能は、Webアプリケーションでは、RFC 1867に基づいて実装されます。Struts(1.2)の場合は、FormFileというプロパティをActionFormに定義し、このプロパティを利用することでファイルを取得するようになっています。
SAStrutsでは、他のプロパティと同じように、アクションにリクエストで指定したtype="file"のinputタグのパラメータと同じ名前のプロパティをFormFileで定義しておけば、アクションで受け取ることができます。
FormFileはインタフェースであるため、Seasar2の仕組み上、そのままだとDIされない旨の警告が出てしまうため、プロパティには @Bindingアノテーションをつける必要があります(S2Containerの自動バインディングの項を参照してください)。
@Required
@Binding(bindingType = BindingType.NONE)
public FormFile formFile;
また、同時に複数のファイルをアップロードすることも可能です。そのような場合には、別のプロパティ名でアップロードすることもできますし、FormFile[] と配列にして受け取ることもできます。
@Required
@Binding(bindingType = BindingType.NONE)
public FormFile[] formFiles;
<s:form action="/upload" enctype="multipart/form-data">
<input type="file" name="formFile" />
<c:forEach varStatus="s" begin="0" end="1">
<input type="file" name="formFiles[${s.index}]" />
</c:forEach>