S2JSFでファイルのアップロードを行う。

なんかいろいろ中途半端に手を付けすぎていますが、
ファイルのアップロードも必要なので調査しました。
はい。以外と簡単でした。

手順ですが、以下が参考になります。
http://www.seasar.org/wiki/index.php?FAQ%2FS2JSF#o8f96c6b

1.Myfacesの拡張タグを使えるようにするために、jsf.diconを編集します。

org.seasar.jsf.runtime.JsfConfigImplにメソッドインジェクションを行うことで可能です。

<component class="org.seasar.jsf.runtime.JsfConfigImpl">
<initMethod name="addTaglibUri">
<arg>"h"</arg>
<arg>"http://java.sun.com/jsf/html"</arg>
</initMethod>
<initMethod name="addTaglibUri">
<arg>"f"</arg>
<arg>"http://java.sun.com/jsf/core"</arg>
</initMethod>
<initMethod name="addTaglibUri">
<arg>"s"</arg>
<arg>"http://www.seasar.org/jsf"</arg>
</initMethod>
<!-- ファイルアップロードのために設定 -->
<initMethod name="addTaglibUri">
<arg>"x"</arg>
<arg>"http://myfaces.sourceforge.net/tld/myfaces_ext_0_9.tld"</arg>
</initMethod>
</component>

2.拡張タグを使ってファイルをアップロードさせるHTMLを書きます。
formのenctype指定と、x:inputFileUploadの利用がキモになります。

<form enctype="multipart/form-data">
<span m:inject="x:inputFileUpload" m:value="#{hogeDto.uploadedFile}" />

3.Dtoでアップロードしたファイルを受け取ります。

importの記述、UploadedFileのsetter/getterを記述します。

import org.apache.myfaces.custom.fileupload.UploadedFile;

public class HogeDto implements Serializable {
private UploadedFile uploadedFile;

public UploadedFile getUploadedFile() {
return this.uploadedFile;
}
public void setUploadedFile(UploadedFile uploadedFile) {
this.uploadedFile = uploadedFile;
System.out.println("uploadFileSize["+uploadedFile.getSize()+"]");
}
}

取り出したファイルは、getInputStream()で取得します。