機能SAMPLE.6 「EzServlet/繰り返し項目のファイル・アップロードする方法」


今回は、繰り返し項目の中で、指定する「ファイルアップロード」の方法について説明します。
前々回の「EzServlet/繰り返し項目で押されたボタンを知る方法(2009-01-21 - T.RYoken がんばる日記 / TryGun blog)」が分かれば、「メチャx2」簡単!


以下のHTMLを例に説明します。ファイル名は「Hoge.html」です。


<html>
<head></head>
<body>
<form method="POST">
<input type="button" name="execute" value="実行">
<tg:loop name="Item">
<input type="file" name="uploadFile">
</tg>
</form>
</body>
</html>


DTOは以下の様になります。

public class Hoge implements Serializable {

   /** Hogeに対応するコントロラークラスを保持する属性です */
   public static final Class CONTROLLER_CLASS = HogeController.class;

   /** 繰り返し項目のインナークラスを格納するリストです。*/
   public List itemList = new ArrayList();

   // 繰り返し項目のプロパティーを保持するインナークラスです。
   public class Item implements Serializable {
      /** アップロードファイル「uploadFile」を格納する属性です。*/
      public File uploadFile;
   }
}


CONTROLLERクラスは以下の様になります。

public class HogeController {

   /** 初期画面を出力するメソッドです */
   public void index(Hoge hoge) {
      // 繰り返し項目をHogeに設定します。
      for(int i=0; i<3; i++) {
         // 繰り返し項目(Item)を生成し、Hogeに追加します。
         hoge.itemList.add(new Item());
      }
   }

   /** 「実行」ボタンが押された時に呼び出されるメソッドです。*/
   public void select(int i, Hoge hoge) {
      // 画面入力値をHoge.javaにセットします。 
      request.set(hoge);
      // 繰り返し項目の数だけloopします。
      Iterator iterator = hoge.itemList.iterator();
      while(iterator.hasNext()) {
            Item item = (Item)iterator.next();
            // ファイルがアップロードされたかを確認します。 
            if(item.uploadFile == null) {
               System.out.println("ファイル名がuploadされませんでした。");
            } else {
               System.out.println("ファイル名:"+item.uploadFile.getName()+"がuploadされました!");
            }
      }
      // 表示するHtmlのDTOをセットします。
      response.setPage(hoge);
   }
}

注意:EzServletは、JAVA SE1.4.xでも動作可能であるため、説明にはTigerの機能は利用していませんm(_ _)m

繰り返しの項目で、指定されたファイルだけがセットされます。指定されなかった場合はnullになります。

つまり、繰り返し項目の1番目と3番目に指定された場合は、itemListのインデックス「0番目」と「2番目」のItemのuploadFileにファイルがセットされ、インデックス「1番目」のItemのuploadFileはnullとなります。


超かーんたーん(o^∀^)oネッ♪