Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Загрузка файлов с томагавком - проблема с отображением сообщения об ошибке

Автор вопроса: ZlatorohОтветов: 2

Я загружаю файлы с помощью <t:inputFileUploadall, все работает нормально, но когда файл больше значения, установленного в 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, я ошибаюсь?

Как я могу решить проблему?

с уважением

jsftomahawk

Ответы

Ответ 1 · рейтинг 4 · BalusC

Вы не можете сделать это с Томагавком. Однако вы можете настроить 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."));
    }
}

Ответ 2 · GreenieMeanie

Как сказал Balus C, это хорошо известная проблема. См.: http://issues.apache.org/jira/browse/TOMAHAWK-1381

Я думаю, что более поздняя версия Tomahwak исправляет это.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы