【发布时间】:2014-03-26 11:15:45
【问题描述】:
我正在使用<p:fileUpload> 上传图片,如下所示。
<p:outputLabel for="txtCatImage" value="#{messages['category.image']}"/>
<p:fileUpload id="txtCatImage" mode="advanced"
dragDropSupport="true" required="true"
sizeLimit="1000000" fileLimit="1" multiple="false"
cancelLabel="#{messages['fileupolad.cancelLabel']}"
label="#{messages['fileupolad.label']}"
uploadLabel="#{messages['fileupolad.uploadLabel']}"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
invalidFileMessage="#{messages['fileupolad.invalidFileMessage']}"
invalidSizeMessage="#{messages['fileupolad.invalidSizeMessage']}"
fileLimitMessage="#{messages['fileupolad.fileLimitMessage']}"
fileUploadListener="#{categoryManagedBean.fileUploadListener}"/>
<p:message for="txtCatImage" showSummary="false"/>
<p:commandButton id="btnSubmit" update="panel messages"
actionListener="#{categoryManagedBean.insert}"
value="#{messages['button.save']}"/>
fileUploadListener在对应的被@ViewScoped修饰的托管bean中如下。
//This is just a utility method and can be placed anywhere in the application.
private static boolean validateImageDimensions(byte[] bytes) throws IOException {
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(bytes));
return bufferedImage.getHeight()>=750 || bufferedImage.getWidth()>=650;
}
public void fileUploadListener(FileUploadEvent event) throws IOException {
UploadedFile uploadedFile = event.getFile();
byte[] bytes = IOUtils.toByteArray(uploadedFile.getInputstream());
if(!Utility.validateImageDimensions(bytes)) {
FacesContext context = FacesContext.getCurrentInstance();
context.validationFailed();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Message summary", "Error message");
FacesContext.getCurrentInstance().addMessage(event.getComponent().getClientId(context), message);
}
else {//Do something.}
}
<p:commandButton> 的监听器如下,如果fileUploadListener() 中的验证失败,则应该不被调用。
public void insert() {
//Code to invoke an EJB to insert a new row along with the uploaded file.
}
如果if(!Utility.validateImageDimensions(bytes)) 被评估为真,那么<p:commandButton> 的动作监听器(上面的insert() 方法)应该不被调用,但是它被调用并且这种验证意味着没有完全没有效果。
As already stated,PrimeFaces 文件上传验证器不起作用。
我在这里做错了什么?上传图片的尺寸验证方法是什么?
【问题讨论】:
标签: validation jsf file-upload primefaces jsf-2.2