multiple file upload (s:fileUpload)
jaja Mar 5, 2008 11:44 AMHi all,
I'm trying to upload several files using seam and facelets.
I've succeeded to upload a single file thanks to this link: http://linuxbeans.blogspot.com/2007/10/image-handling-in-seam-apps-part-ii.html
however, I failed to do the same with several files.
here is my code:
componenets.xml <component class="org.jboss.seam.web.MultipartFilter"> <property name="createTempFiles">true</property> <property name="maxRequestSize">1000000</property> </component>
//Action bean package com.test.business.action; import java.util.ArrayList; import java.util.List; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.log.Log; import com.cat.lc.nfp.business.model.UploadFile; @Scope(ScopeType.SESSION) @Name("testUploadService") public class TestUploadAction { @Logger Log log; private static final String accept = "text/plain,text/xml,application/xml,application/vnd.ms-excel"; int fileNumber = 5; private List<UploadFile> files; public List<UploadFile> getFiles() { return files; } public void setFiles(List<UploadFile> files) { this.files = files; } public void setFileNumber(int fileNumber) { this.fileNumber = fileNumber; } public void upload(){ display(); } @Create public void initialize(){ files = new ArrayList<UploadFile>(fileNumber); for (int i = 0; i < fileNumber; i++) { files.add(new UploadFile(i)); } } private void display(){ UploadFile file; for (int i = 0; i < files.size(); i++) { log.debug("########### processing file #0", i); file = files.get(i); if(file!=null){ log.debug("contentType:#0", file.getContentType()); log.debug("fileName:#0", file.getName()); log.debug("title:#0", file.getTitle()); log.debug("size:#0", file.getSize()); } } } public int getFileNumber() { return fileNumber; } public String getAccept() { return accept; } }
//UploadFileBean_ import java.io.Serializable; import org.jboss.seam.annotations.Name; @Name("uploadFile") |public class UploadFile implements Serializable{ private int id; private byte[] data; private String contentType; private String name; private String title; private int size; public UploadFile(){ } public UploadFile(int id){ this.id=id; } public byte[] getData() { return data; } public void setData(byte[] data) { this.data = data; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
//View (.xhtml) <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.ajax4jsf.org/rich" xmlns:a="https://ajax4jsf.dev.java.net/ajax" template="../common/layout/template.xhtml"> <ui:define name="body"> <h1><h:outputText value="#{messages['data.fileUpload.label.title']}" /></h1> <br /> <br /> <h:form enctype="multipart/form-data"> <a:outputPanel id="table"> <table border="0"> <tbody> <tr> <th><h:outputText value="Title" /></th> <th><h:outputText value="File" /></th> </tr> <a:repeat value="#{testUploadService.files}" var="file"> <tr> <td> <h:inputText value="#{file.title}" immediate="true" size="50" maxlength="80"/> </td> <td> <s:fileUpload data="#{file.data}" accept="#{testUploadService.accept}" contentType="#{file.contentType}" fileName="#{file.name}" fileSize="#{file.size}" size="40" maxlength="80" /> </td> </tr> </a:repeat> <tr> <td colspan="2" style="text-align: center;"> <a:commandButton value="Upload" action="#{testUploadService.upload}"/> <a:commandButton value="Cancel" type="reset"/> </td> </tr> </tbody> </table> </a:outputPanel> <rich:messages /> </h:form> </ui:define> </ui:composition>
The problem is that the files uploaded are usually empty!
any idea?
thx in advance.