0 Replies Latest reply on May 29, 2007 3:58 PM by Gus Gu

    Need an advice to improve Seam-ICEfaces fileUpload Session b

    Gus Gu Expert

      Hi all,

      I reviewed the Seam-ICEfaces fileUpload demo codes (as follows), and I want to change the SFSB to conversation bean. In addition, the codes seem a little hard to follow, anybody can give some advice on how to simplify them? I really appreciate it. Thank you very much in advance. The demo codes are listed as follows:

      /**
       * <p>The InputFileBackerBean class is the backing bean for the inputfile showcase
       * demonstration. It is used to store the state of the file uploading
       * operation.</p>
       *
       * @since 0.3.0
       */
      @Stateful
      
      @Name("inputFileBackerBean")
      @Scope(ScopeType.SESSION)
      public class InputFileBackerBean implements InputFileBacker, Renderable, Serializable {
      
       private int percent = -1;
       private File file = null;
       private transient PersistentFacesState state;
      
       private String fileName = "";
       private String contentType = "";
      
       private InnerProgressMonitor pmImpl;
      
       private static Log log =
       LogFactory.getLog(InputFileBackerBean.class);
      
       public InputFileBackerBean() {
       pmImpl = new InnerProgressMonitor();
       state = PersistentFacesState.getInstance();
       }
      
       public PersistentFacesState getState() {
       return state;
       }
      
       public void renderingException (RenderingException re) {
       log.error("Rendering exception " , re);
       }
      
      
       public void setPercent(int percent) {
       this.percent = percent;
       }
      
       public int getPercent() {
       return percent;
       }
      
       public void setFile(File file) {
       this.file = file;
       }
      
       public File getFile() {
       return file;
       }
      
       public InnerProgressMonitor getProgressMonitor() {
       return pmImpl;
       }
      
       public InnerProgressMonitor getActionMonitor() {
       return pmImpl;
       }
      
      
       public void setFileName(String fileName) {
       this.fileName = fileName;
       }
      
       public String getFileName() {
      
       return fileName;
       }
      
       public void setContentType(String contentType) {
       this.contentType = contentType;
       }
      
       public String getContentType() {
       return contentType;
       }
      
       @Remove
       @Destroy
       public void destroy() {
       }
      
      
       /**
       * Inner class to handle updates and action. Do this to keep the
       * render call from triggering concurrent access problems in the Bean.
       */
       public class InnerProgressMonitor implements
       Serializable {
      
      
      
       public void progress(EventObject event) {
      
       com.icesoft.faces.component.inputfile.InputFile file =
       (com.icesoft.faces.component.inputfile.InputFile) event.getSource();
       int percent = file.getFileInfo().getPercent();
       InputFileBackerBean.this.setPercent( percent );
       InputFileBackerBean.this.setFile( file.getFile() );
      
       if (log.isDebugEnabled()) {
       log.debug("Progress - Percent: " + percent);
       }
       try {
       // execute the lifecycle to initialize Seam to prevent
       // IllegalStateExceptions, and render.
       state.execute();
       state.render();
      
       } catch (RenderingException re ) {
       System.out.println("Rendering exception : " + re);
       re.printStackTrace();
       }
       }
      
      
      
      
       public String action(ActionEvent event) {
      
       com.icesoft.faces.component.inputfile.InputFile inputFile = (com.icesoft.faces.component.inputfile.InputFile) event.getSource();
       if (inputFile.getStatus() == com.icesoft.faces.component.inputfile.InputFile
       .SAVED) {
       InputFileBackerBean.this.setFileName(inputFile.getFileInfo().getFileName());
       InputFileBackerBean.this.setContentType(inputFile.getFileInfo().getContentType());
       InputFileBackerBean.this.setFile(inputFile.getFile());
      
       if (log.isDebugEnabled()) {
       log.debug("File uploaded: " + inputFile.getFileInfo().getFileName());
       }
       }
      
       if (inputFile.getStatus() == com.icesoft.faces.component.inputfile.InputFile
       .INVALID) {
       inputFile.getFileInfo().getException().printStackTrace();
       }
      
       if (inputFile.getStatus() == com.icesoft.faces.component.inputfile.InputFile
       .SIZE_LIMIT_EXCEEDED) {
       inputFile.getFileInfo().getException().printStackTrace();
       }
      
       if (inputFile.getStatus() == com.icesoft.faces.component.inputfile.InputFile
       .UNKNOWN_SIZE) {
       inputFile.getFileInfo().getException().printStackTrace();
       }
       return null;
       }
       }
      
      }
      
      and also the jsp codes:
      <ice:panelGrid
       styleClass="componentLayoutRootTable"
       columns="1">
       <ice:panelGroup styleClass="formBorderHighlight"
       style="text-align:left">
       <ice:inputFile
       progressListener="#{inputFileBackerBean.progressMonitor.progress}"
       actionListener="#{inputFileBackerBean.actionMonitor.action}"/>
       <ice:outputProgress id="pro"
       value="#{inputFileBackerBean.percent}"/>
       <ice:outputText
       value="File Name: #{inputFileBackerBean.fileName}"/>
       <br/>
       <ice:outputText
       value="Content Type: #{inputFileBackerBean.contentType}"/>
       <ice:messages/>
       </ice:panelGroup>
       </ice:panelGrid>