3 Replies Latest reply on Aug 24, 2010 4:52 AM by ilya_shaikovsky

    Problem with rich fileUpload

    pravardhan

      I am trying to replicate the file upload example in my project
      http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?tab=usage&cid=1058914

      But the uploaded Files info panel doesn't list the uploaded files.
      xhtml page:
      <h:form>
      <h:panelGrid columns="2" columnClasses="top,top">
      <rich:fileUpload fileUploadListener="#{fileUploadBean.listener}"
      maxFilesQuantity="#{fileUploadBean.uploadsAvailable}"
      id="upload"
      immediateUpload="#{fileUploadBean.autoUpload}"
      acceptedTypes="jpg, gif, png, bmp" allowFlash="#{fileUploadBean.useFlash}">
      <a4j:support event="onuploadcomplete" reRender="info" />
      </rich:fileUpload>
      <h:panelGroup id="info">
      <rich:panel bodyClass="info">
      <f:facet name="header">
      <h:outputText value="Uploaded Files Info" />
      </f:facet>
      <h:outputText value="No files currently uploaded"
      rendered="#{fileUploadBean.size==0}" />
      <rich:dataGrid columns="1" value="#{fileUploadBean.files}"
      var="file" rowKeyVar="row">
      <rich:panel bodyClass="rich-laguna-panel-no-header">
      <h:panelGrid columns="2">
      <a4j:mediaOutput element="img" mimeType="#{file.mime}"
      createContent="#{fileUploadBean.paint}" value="#{row}"
      style="width:100px; height:100px;" cacheable="false">
      <f:param value="#{fileUploadBean.timeStamp}" name="time"/>
      </a4j:mediaOutput>
      <h:panelGrid columns="2">
      <h:outputText value="File Name:" />
      <h:outputText value="#{file.name}" />
      <h:outputText value="File Length(bytes):" />
      <h:outputText value="#{file.length}" />
      </h:panelGrid>
      </h:panelGrid>
      </rich:panel>
      </rich:dataGrid>
      </rich:panel>
      <rich:spacer height="3"/>

      <a4j:commandButton action="#{fileUploadBean.clearUploadData}"
      reRender="info, upload" value="Clear Uploaded Data"
      rendered="#{fileUploadBean.size>0}" />
      </h:panelGroup>
      </h:panelGrid>
      </h:form>

      FileUploadBean.java:

      package com.calonex.util.fileUpload;

      import java.io.ByteArrayOutputStream;
      import java.io.IOException;
      import java.io.OutputStream;
      import java.util.ArrayList;
      import org.jboss.seam.annotations.Name;
      import org.richfaces.event.UploadEvent;
      import org.richfaces.model.UploadItem;
      import org.apache.commons.io.FileUtils;
      import org.apache.commons.io.FilenameUtils;

      @Name("fileUploadBean")
      public class FileUploadBean {
      private ArrayList files = new ArrayList();
      private int uploadsAvailable = 5;
      private boolean autoUpload = true;
      private boolean useFlash = true;
      public int getSize() {
      if (getFiles().size()>0){
      return getFiles().size();
      }else
      {
      return 0;
      }
      }

      public FileUploadBean() {
      }

      public void paint(OutputStream stream, Object object) throws IOException {
      stream.write(getFiles().get((Integer)object).getData());
      }

      public void listener(UploadEvent event) throws Exception{
      UploadItem item = event.getUploadItem();
      File file = new File();
      file.setLength(item.getData().length);
      file.setName(item.getFileName());
      file.setData(item.getData());
      files.add(file);
      uploadsAvailable--;
      }

      public String clearUploadData() {
      files.clear();
      setUploadsAvailable(5);
      return null;
      }

      public long getTimeStamp(){
      return System.currentTimeMillis();
      }

      public ArrayList getFiles() {
      return files;
      }

      public void setFiles(ArrayList files) {
      this.files = files;
      }

      public int getUploadsAvailable() {
      return uploadsAvailable;
      }

      public void setUploadsAvailable(int uploadsAvailable) {
      this.uploadsAvailable = uploadsAvailable;
      }

      public boolean isAutoUpload() {
      return autoUpload;
      }

      public void setAutoUpload(boolean autoUpload) {
      this.autoUpload = autoUpload;
      }

      public boolean isUseFlash() {
      return useFlash;
      }

      public void setUseFlash(boolean useFlash) {
      this.useFlash = useFlash;
      }

      }

      File.java

      package com.calonex.util.fileUpload;
      public class File {
      private String Name;
      private String mime;
      private long length;
      private byte[] data;
      public byte[] getData() {
      return data;
      }
      public void setData(byte[] data) {
      this.data = data;
      }
      public String getName() {
      return Name;
      }
      public void setName(String name) {
      Name = name;
      int extDot = name.lastIndexOf('.');
      if(extDot > 0){
      String extension = name.substring(extDot +1);
      if("bmp".equals(extension)){
      mime="image/bmp";
      } else if("jpg".equals(extension)){
      mime="image/jpeg";
      } else if("gif".equals(extension)){
      mime="image/gif";
      } else if("png".equals(extension)){
      mime="image/png";
      } else {
      mime = "image/unknown";
      }
      }
      }
      public long getLength() {
      return length;
      }
      public void setLength(long length) {
      this.length = length;
      }

      public String getMime(){
      return mime;
      }

      }

      Any ideas please!!!

      Thanks in advance.