rich:fileUpload returns
thomas.m Feb 6, 2009 8:33 PMI have a rich:fileUpload component in one of my pages, I want my users to be able to upload a CSV file to the server. Here is the page source :
<a4j:outputPanel id="ajxBlackList_19"> <h:inputText id="property_BLACK_LIST" value="#{eventCreation.currentEvent.blackList}" /> </a4j:outputPanel> <h:outputText id="houtputText_24" value="Charger les valeurs via un fichier CSV :" /> <rich:fileUpload id="black_list_upload" fileUploadListener="#{eventCreation.listener}" listHeight="200" immediateUpload="false" acceptedTypes="csv,txt"> <a4j:support id="a4jsupport_27" event="onuploadcomplete" reRender="ajxBlackList_19" /> </rich:fileUpload> <h:message id="hmessage_29" tooltip="true" for="black_list_upload" style="color: red;" />
And here is the code of my bean listener (which is never called) :
private UploadItem csvItem; [...] public synchronized void listener(UploadEvent event) { this.setCsvItem( event.getUploadItem() ); // retrieve component id for later use UIComponent fromComponent = event.getComponent(); String componentId = fromComponent.getId(); String content = null; // file reading if (getCsvItem().isTempFile()) { File csvFile = getCsvItem().getFile(); StringBuilder fileData = new StringBuilder(); try { BufferedReader reader = new BufferedReader(new FileReader(csvFile)); char[] buf = new char[1024]; int numRead=0; while((numRead=reader.read(buf)) != -1){ fileData.append(buf, 0, numRead); } reader.close(); } catch(Exception e) { addErrorMessage(e.getMessage(), componentId); return; } content = fileData.toString(); } else { content = new String(getCsvItem().getData()); } this.getCurrentEvent().getProperty(DrawingLotsEvent.PROPERTY_WHITE_LIST).setValue(content); }
Every time I try to upload a file, I get an instant error "Transfer error occured" without my listener being called. I have no trace of any error in a4j log window.
I put this in my web.xml as suggested :
<filter> <display-name>Ajax4jsf Filter</display-name> <filter-name>ajax4jsf</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> <init-param> <param-name>createTempFiles</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>maxRequestSize</param-name> <param-value>1000000</param-value> </init-param> </filter>
Anyone has any idea ? Or maybe a way to debug this component so I could know WHY this error occurs ?
Thanks a lot.