2010-02-12 108 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.")); 
    } 
}