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.