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()で取得します。