4 Replies Latest reply on Aug 6, 2007 2:31 PM by Pierre De Paepe

    FileUpload

    Justin F. Knotzke Newbie

      Hi,

      I have what's got to be a very basic Seam question. I am using SEAM 2.0 BETA.

      I am simply trying to upload a CSV file. Here's the code:

      
      ....
      import static org.jboss.seam.ScopeType.SESSION;
      
      import java.io.Serializable;
      
      import javax.persistence.Entity;
      import javax.persistence.Id;
      import javax.persistence.Table;
      
      import org.hibernate.validator.Length;
      import org.hibernate.validator.NotNull;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      
      @Entity
      @Name("uploadedWorkout")
      @Scope(SESSION)
      public class UploadedWorkout implements Serializable
      {
       private byte[] uploadedFile;
       @Id @NotNull
       private String fileName;
       private String contentType;
      
       public UploadedWorkout()
       {
       }
      
       public String getFileName()
       {
       return fileName;
       }
      
       ........ sets and gets
      



      Action Class

      import javax.ejb.Stateless;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.log.Log;
      import org.jboss.seam.faces.FacesMessages;
      import org.jboss.seam.annotations.Scope;
      import static org.jboss.seam.ScopeType.SESSION;
      
      @Stateless
      @Scope(SESSION)
      @Name("uploadWorkout")
      public class UploadWorkoutBean implements UploadWorkout {
      
       @Logger private Log log;
       @In(value="uploadedWorkout", create=true)
       private UploadedWorkout uploadedWorkout;
      
       @In FacesMessages facesMessages;
      
       public void uploadWorkout()
       {
       //implement your business logic here
       log.info("Content Type is: " + uploadedWorkout.getContentType());
       log.info("FileName is: " + uploadedWorkout.getFileName());
       log.info("uploadWorkout.uploadWorkout() action called");
       facesMessages.add("uploadWorkout");
       }
      


      JSF:



      
       <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="layout/template.xhtml">
      
      <ui:define name="body">
      
       <h:messages globalOnly="true" styleClass="message"/>
      
       <rich:panel>
       <f:facet name="header">Upload Workout</f:facet>
      
       <h:form id="uploadedWorkoutForm">
       <s:fileUpload id="inUploadFile"
       data="#{uploadedWorkout.uploadedFile}"
       fileName="#{uploadedWorkout.fileName}"
       contentType="#{uploadedWorkout.contentType}"
       styleClass="fileUploadInput" />
      
      
       <h:commandButton id="uploadWorkout" value="uploadWorkout!"
       action="#{uploadWorkout.uploadWorkout}"/>
      
       </h:form>
      
       </rich:panel>
      
      </ui:define>
      
      </ui:composition>
      


      The properties in uploadedFile are always NULL. As a matter of fact, I had to stuff create=true in because uploadedFile itself was null.

      If I swap:

       @In(value="uploadedWorkout", create=true)
       private UploadedWorkout uploadedWorkout;
      


      for

       @In
       private User user;
      


      ...which is a component I successfully used for registration and login, all works.. So the problem is with UploadedWorkout..

      Any ideas ?

      Thanks.