【Struts2】FileUploadInterceptorを利用して複数のファイルをアップロード
Struts2のFileUploadでちょっとハマったポイント。
まず、FileUploadのインターセプトを利用する為の基本的なコード。
Action:
private File myFile;
private String fileName;
private String contentType;
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
struts.xml:
・・・ <savePath>images/foo</savePath> ・・・ ・・・ <result name="input">bar.jsp</result> ・・・
HTML Form:
<form action="hoge.action" enctype="multipart/form-data" method="post"> <input name="myFile" type="file" /> <input type="submit" value="Submit" /> </form>
基本的にはこんな感じ。
で、複数のファイルの場合、こんな感じで配列で対応してもOK
(XMLとJSPは省略)
private File[] myFile;
private String[] fileName;
private String[] contentType;
public void setMyFile(File[] myFile) {
this.myFile = myFile;
}
public void setFileName(String[] fileName) {
this.fileName = fileName;
}
public void setContentType(String[] contentType) {
this.contentType = contentType;
}
ですが、配列にした場合、1箇所目のファイルをnull・2箇所目のみアップロードした時、
配列にキューされていくだけなので、表示の際に1箇所目はなし・2箇所目に表示、ってことができない。
で、これをやりたい場合にはこんな風になる。
XMLとJSPは省略。
private File myFile1;
private File myFile2;
private String myFile1FileName;
private String myFile2FileName;
private String myFile1ContentType;
private String myFile2ContentType;
public void setMyFile1(File myFile1) {
this.myFile1 = myFile1;
}
public void setMyFile2(File myFile2) {
this.myFile2 = myFile2;
}
public void setMyFile1FileName(String myFile1FileName) {
this.myFile1FileName = myFile1FileName;
}
public void setMyFile2FileName(String myFile2FileName) {
this.myFile2FileName = myFile2FileName;
}
public void setMyFile1ContentType(String myFile1ContentType) {
this.myFile1ContentType = myFile1ContentType;
}
public void setMyFile2ContentType(String myFile2ContentType) {
this.myFile2ContentType = myFile2ContentType;
}
File型のmyFileっていう変数は、好きな名前をつけられるわけですが、
fileNameとcontentTypeはStruts2が自動で認識してくれる特殊な名前なわけです。
そして、File型の変数を複数定義したりして、fileName・contentTypeも明示的に複数定期議する必要がある場合
(File型の変数名)FileName
(File型の変数名)ContentType
とすることで、明示的に複数定義することができます。
Struts2 フルスタック化&Webアプリケーション開発 ~Struts2+Spring 2+Tiles+iBATIS+GWTで作るショッピングサイト~
著者/訳者:三国 逸文
出版社:毎日コミュニケーションズ( 2008-11-28 )
定価:¥ 3,990
単行本(ソフトカバー) ( 320 ページ )
ISBN-10 : 4839928444
ISBN-13 : 9784839928445
StrutsによるWebアプリケーションスーパーサンプル第2版
著者/訳者:高安 厚思(オープンストリーム勤務) 西川 麗(電通国
出版社:ソフトバンク クリエイティブ( 2007-03-29 )
定価:¥ 3,360
単行本 ( 504 ページ )
ISBN-10 : 4797338210
ISBN-13 : 9784797338218
No related posts.



コメントはまだありません。