2010-02-12 109 views
2

我使用<t:inputFileUpload上传文件,所有工作正常,但是当文件大于web.xml中设置的值时,它不会输出任何错误或警告消息。 我的代码:使用tomahawk上传文件 - 显示错误信息的问题

<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标签写错误,是我错了吗?

我该如何解决问题?

最好的问候

回答

4

你不能用Tomahawk做到这一点。但是,您可以在ExtensionsFilter中配置uploadMaxFileSize,但是当它发生时,它将强制抛出超出所有JSF事件的SizeLimitExceededException,以便最终用户以丑陋的HTTP 500错误页面结束。尽管您可以在web.xml中定义自定义错误页面,但只能显示某些状态代码或异常类型,但您无法在FacesMessage中很好地显示它,最后可以在h:message中显示该页面。

要做到这一点很好的唯一方法是允许无限大小的上传或1GB的限制左右(这可能是一个痛苦,但毕竟,这只是客户自己决定这么做)抱怨客户,确保有一个清除消息在某处的最大允许尺寸的形式)。这种方式可以采取的一个实际好处Validator将在相关h:message显示ValidatorException,e.g:

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.")); 
    } 
}