s:fileUpload not working
akm983 Jul 16, 2009 12:27 AMHi,
I am using s:fileUpload in my program to upload image to the server but the imageData is always null. My web.xml is like this
<filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
My components.xml is as below:
<web:multipart-filter max-request-size="5242880" create-temp-files="true" url-pattern="/*"/>
my xhtml is :
<h:form id="propertyAddForm" enctype="multipart/form-data">
<h:panelGrid columns="2">
<s:decorate id="imageField">
<h:outputLabel for="image" styleClass="propDesc">Property Picture:</h:outputLabel>
<s:fileUpload id="image" accept="image/png,image/gif,image/jpeg, image/jpg"
fileName="#{propertyAction.imageFileName}" fileSize="#{propertyAction.imageFileSize}"
data="#{propertyAction.imageData}" contentType="#{propertyAction.imageContentType}">
<a4j:support event="onchange" action="#{propertyAction.saveImage}" reRender="imageDisplayField" ajaxSingle="true"/>
</s:fileUpload>
</s:decorate>
<s:decorate id="imageDisplayField">
<s:graphicImage id="imageDisplay" rendered="#{propertyAction.imageData ne null}" value="#{propertyAction.imageData}"
fileName="#{propertyAction.imageFileName}" alt="[Property Picture]">
</s:graphicImage>
</s:decorate>
</h:panelGrid>
</h:form>
the backing bean is a statefule bean named propertyAction and below is the code related to fileupload:
public byte[] getImageData() {
return imageData;
}
public void setImageData(byte[] imageData) {
this.imageData = imageData;
}
public String getImageContentType() {
return imageContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
public double getImageFileSize() {
return imageFileSize;
}
public void setImageFileSize(double imageFileSize) {
this.imageFileSize = imageFileSize;
}
public void saveImage() {
if (getImageData() != null) {
try {
Image image = new Image();
image.setInput(getImageData());
if (image.getBufferedImage() == null) {
throw new IOException("The property image data is empty.");
}
if (!image.getContentType().getMimeType().matches("image/(png|gif|jpeg)")) {
facesMessages.addToControl("image",
"Invalid image type: " + image.getContentType());
}
if (image.getHeight() > 64 || image.getWidth() > 64) {
if (image.getHeight() > image.getWidth()) {
image.scaleToHeight(64);
} else {
image.scaleToWidth(64);
}
setImageData(image.getImage());
}
} catch (IOException e) {
log.error("An error occurred reading the profile image", e);
facesMessages.addToControl("image", "An error occurred reading the property image.");
setImageData(null);
setImageContentType(null);
}
}
}
My work is really stuck because of this. Please help me in this if anyone can.
Thanks