2

我正在上传文件,<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标签上写一个错误,我错了吗?

我该如何解决这个问题?

此致

4

2 回答 2

4

你不能用 Tomahawk 做到这一点。但是,您可以uploadMaxFileSize在中配置ExtensionsFilter,但是当它发生时,它会硬抛出一个SizeLimitExceededException超出所有 JSF 事物的内容,以便最终用户最终得到一个丑陋的 HTTP 500 错误页面。尽管您可以定义自定义错误页面,web.xml其中应该仅针对某些状态代码或异常类型显示,但您无法FacesMessage在最终可以显示在h:message.

做到这一点的唯一方法是允许无限大小的上传或 1GB 左右的限制(这可能很痛苦,但毕竟,这只是客户自己的决定;).. 为了避免抱怨客户,请确保表格中某处有关于最大允许尺寸的明确信息)。通过这种方式,您可以利用将在关联中Validator显示的真实值,例如:ValidatorExceptionh: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."));
    }
}
于 2010-02-12T11:24:02.790 回答
0

Like Balus C said, it's a well known issue. See: http://issues.apache.org/jira/browse/TOMAHAWK-1381

I think a later version of Tomahwak fixes this.

于 2010-02-12T20:46:30.350 回答