FileUpload rerender
frer Aug 21, 2009 4:51 PMHi,
I'm trying to use the fileUpload to upload an image. When the user selects the image from the fileUpload, I want the file to start immediately to be uploaded. On completion, I want the fileUpload to be hidden and the image to appear (using a graphicImage) with a link to remove it (using a commandlink). The user can then use the remove image button to remove it and then the fileUpload would appear again.
Here is my code:
<s:div id="item-image-value-container">
<rich:fileUpload id="item-image-value-upload"
fileUploadListener="#{formAction.uploadImage}"
maxFilesQuantity="1"
immediateUpload="true"
acceptedTypes="jpg, gif, png, bmp"
addControlLabel="#{messages['org.mdarad.framework.resources.list.add']} Image"
cancelEntryControlLabel="#{messages['org.mdarad.framework.resources.list.remove']} Image"
rendered="#{formAction.entity.image == null}">
<a4j:support event="onuploadcomplete" reRender="item-image-value-container" />
</rich:fileUpload>
<h:panelGrid columns="2" rendered="#{formAction.entity.image != null}">
<s:graphicImage id="item-image-value-preview" value="#{formAction.entity.image.content}" style="width:48px"/>
<a4j:commandLink id="item-image-value-remove"
action="#{formAction.clearImage}"
value="#{messages['org.mdarad.framework.resources.list.remove']} Image"
reRender="item-image-value-container"/>
</h:panelGrid>
</s:div>
public void uploadImage(UploadEvent event) throws Exception {
UploadItem item = event.getUploadItem();
//Get data from temporary created file
File file = item.getFile();
byte[] data = new byte[(int) file.length()];
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(data);
//Now update object
org.dataisland.primitives.datatype.Blob blob = new org.dataisland.primitives.datatype.Blob();
getEntity().setImage(blob);
getEntity().getImage().setContent(data);
getEntity().getImage().setContentType(item.getContentType());
getEntity().getImage().setContentFileName(item.getFileName());
}
public void clearImage() throws Exception {
getEntity().setImage(null);
}As you can see I use the rendered attribute on the panelGrid and the fileUpload to decide which section should be hidden and which one shouldn't.
For a reason I do not understand, the render/reRender works on the commandLink but not on the fileUpload.
Could someone explain what I am doing wrong?
Thank you