FileUpload
jknotzke Aug 6, 2007 11:51 AMHi,
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.