使用tomahawk上传文件 - 显示错误消息的问题

时间:2010-02-12 07:37:18

标签: jsf tomahawk

我上传的文件<t:inputFileUpload一切正常,但是当文件比web.xml中的值设置更大时,它不会输出任何错误或警告消息。 我的代码:

  <h:form id="uploadForm" enctype="multipart/form-data">    
               <t:inputFileUpload id="fileupload" accept="image/*" storage="file"
                    value="#{fileUpload.uploadedFile}" styleClass="fileUploadInput"
                    required="true" validator="epacient.FileUploadValidator"  validatorMessage="Napacna vrsta ali prevelika datoteka."/>
                <h:message for="fileupload" style="color: red;" />
                <br />
                <h:commandButton value="Upload" id="fileUploadButton" action="#{fileUpload.upload}" />
                <h:message for="uploadForm" style="color: red;" />
   </h:form>

如果文件很大,它应该在<h:message标签上写错误,我错了吗?

如何解决问题?

最好的问候

2 个答案:

答案 0 :(得分:4)

你不能用战斧来做这件事。但是,您可以在ExtensionsFilter中配置uploadMaxFileSize,但是当它发生时,它会强制抛出SizeLimitExceededException,这超出了所有JSF的内容,因此最终用户最终会变得丑陋HTTP 500错误页面。虽然您可以在web.xml中定义自定义错误页面,这些错误页面应仅针对某些状态代码或例外类型显示,但您无法在最终可以显示的FacesMessage中得到它。 h:message

完成这一切的唯一方法就是允许无限大小的上传或大约1GB的限制(这可能是一个痛苦,但毕竟,这只是客户自己的决定;)...以避免抱怨客户端,确保在表单中某处有关于允许的最大大小的清除消息。通过这种方式,您可以获得真实的Validator,它会在关联的ValidatorException中显示h:message,例如:

private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
    if (((UploadedFile) value).getSize() > MAX_FILE_SIZE) {
        throw new ValidatorException(new FacesMessage("Sorry, max 10MB allowed."));
    }
}

答案 1 :(得分:0)

就像Balus C所说,这是一个众所周知的问题。请参阅:http://issues.apache.org/jira/browse/TOMAHAWK-1381

我认为Tomahwak的更高版本修复了此问题。