機能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ネッ♪