Need an advice to improve Seam-ICEfaces fileUpload Session b
gus888 May 29, 2007 3:58 PMHi 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>