Empty UploadItem when using fileUpload
t1mb0 Apr 6, 2008 1:38 PMI've been pulling my hair out all day trying to get the fileUpload to work for RichFaces 3.2.0 with facelets 1.1.14.
I practically copied the exadel live demo but in the listener method I get an UploadItem from the UploadEvent, where the bytes, file and filename attributes are all null.
I just can't see what I'm doing wrong:-
web.xml :
<filter-class>org.ajax4jsf.Filter</filter-class> <init-param> <param-name>createTempFiles</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>maxRequestSize</param-name> <param-value>1000000</param-value> </init-param>
xhtml form:-
<h:form id="userProfilePhotoUpload">
<h:panelGrid columns="2" columnClasses="top,top">
<rich:fileUpload fileUploadListener="#{fileUploadBean.listener}"
maxFilesQuantity="#{fileUploadBean.uploadsAvailable}"
reRender="table" id="upload"
immediateUpload="#{fileUploadBean.autoUpload}"
acceptedTypes="jpg, gif, png, bmp">
<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>
<h:panelGrid columns="2">
<a4j:mediaOutput element="img" mimeType="image/jpeg"
createContent="#{fileUploadBean.paint}" value="#{row}"
style="width:100px; height:100px;" />
<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"/>
<br />
<a4j:commandButton action="#{fileUploadBean.clearUploadData}"
reRender="info, upload" value="Clear Uploaded Data"
rendered="#{fileUploadBean.size>0}" />
</h:panelGroup>
</h:panelGrid>
</h:form>
FileUploadBean.java:-
public class FileUploadBean
{
private ArrayList<File> files = new ArrayList<File>();
private int uploadsAvailable = 5;
private boolean autoUpload = false;
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 IOException
{
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 ArrayList<File> getFiles()
{
return files;
}
public void setFiles(ArrayList<File> 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;
}
}
facesconfig:-
<managed-bean> <managed-bean-name>fileUploadBean</managed-bean-name> <managed-bean-class>net.xxxx.FileUploadBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
If you can see whats going wrong here I'd be really grateful..