Загрузка файлов с помощью томагавка - проблема с отображением сообщения об ошибке
Я загружаю файлы с <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 ответа
Вы не можете сделать это с Томагавком. Однако вы можете настроить uploadMaxFileSize
в ExtensionsFilter
, но когда это произойдет, он будет SizeLimitExceededException
что выходит за рамки всего, что связано с JSF, так что у конечного пользователя появляется ужасная страница с ошибкой HTTP 500. Хотя вы можете определить пользовательские страницы ошибок в web.xml
который должен отображаться только для определенных кодов состояния или типов исключений, вы не сможете получить его в FacesMessage
который вы в конце можете отобразить в h:message
,
Единственный способ сделать все это красиво - это разрешить неограниченное количество загрузок или ограничение в 1 ГБ или около того (что может быть проблемой, но, в конце концов, это только собственное решение клиента;) .. чтобы избежать жалоб клиентов, убедитесь, что что где-то в форме есть четкое сообщение о максимально допустимых размерах). Таким образом, вы можете воспользоваться реальным 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."));
}
}
Как сказал Balus C, это хорошо известная проблема. Смотрите: http://issues.apache.org/jira/browse/TOMAHAWK-1381
Я думаю, что более поздняя версия Tomahwak исправляет это.