Seam file upload not uploading without persistance to db
gebuh Nov 9, 2011 6:57 PMMy use case is:
user uploads an excel file
I parse that file into an entityBean list
validate the data and save it to a db table.
I can upload a file and save it to the db as a lob. But I can't upload the file and manipulate it first. It appears that the data remains null.
uploadView.xhtml:
<h:form enctype="multipart/form-data"> <s:fileUpload id="file" acceptedTypes ="#{acType}" data="#{uploadAttachment.data}" contentType="#{uploadAttachment.contentType}" fileName="#{uploadAttachment.name}" fileSize="#{uploadAttachment.size}" /> <a:commandButton value="Upload" action="#{uploadAttachment.upload()}" reRender="vw"/>
components.xml:
<web:multipart-filter create-temp-files="false" max-request-size="1000000" url-pattern="*.seam" />
upload entity:
@Name("uploadAttachment") @Scope(ScopeType.SESSION) public class UploadAttachment implements Serializable { private String name; private long size; private String contentType; private byte[] data; //this is always null public boolean upload(){ log.debug("getting some data " + this.getName()); return true; } ...various getters and setters
So I tried using rich:fileUpload.
uploadView.xhtml:
<rich:fileUpload fileUploadListener="#{uploadAttachment.listener}" id="upload" immediateUpload="false" acceptedTypes="#{acType}" > <a:support event="onuploadcomplete" reRender="upPnl" /> </rich:fileUpload>
added this method to upload attachemt file:
public void listener(UploadEvent event) throws Exception{ log.debug("creating a new attachment object"); UploadItem item = event.getUploadItem(); this.data = item.getData(); this.size = this.data.length; //TODO HANDLE NULLS!!!!!!!!!!!!!!!!! this.name =item.getFileName(); this.contentType = item.getContentType(); }
Initially this wouldn't work either data was still null), until I added:
<init-param> <param-name>createTempFiles</param-name> <param-value>false</param-value> </init-param>
to web.xml. I'm able to upload files now, but why would I need this? Shouldn't the filter in components.xml cover this?
This still doesn't allow me to upload files using the Seam component though. Is there something else I'm missing?