2010-02-12 7 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

토마 호크에서는이 작업을 수행 할 수 없습니다. 그러나 ExtensionsFilteruploadMaxFileSize을 구성 할 수는 있지만 발생하면 SizeLimitExceededException이 모든 JSF 문제를 넘어서고 최종 사용자가 추악한 HTTP 500 오류 페이지로 끝납니다. 특정 상태 코드 또는 예외 유형에 대해서만 표시되어야하는 web.xml의 사용자 정의 오류 페이지를 정의 할 수 있지만 에 끝까지 표시 할 수있는 FacesMessage에서 올바르게 가져올 수있는 방법은 없습니다.

이 모든 작업을 훌륭하게 수행하는 유일한 방법은 제한없는 크기의 업로드 또는 1GB 제한을 허용하는 것입니다 (통증이 될 수 있지만 결국에는 클라이언트 자체에서 결정하게됩니다.) .. 피하기 위해 불만을 제기하는 고객의 경우 명확한 메시지가 허용되는 최대 크기에 대한 형식의 어딘가에 있는지 확인하십시오. 당신은 예컨대 관련 h:messageValidatorException을 표시하는 실제 Validator의 이익을 취할 수있는이 방법 : Balus C처럼

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