Загрузка файлов и PrettyFaces и JSF 2.2

Я пробовал решение из: Primefaces FileUpload с PrettyFaces и JSF 2.2.3

Но это не работает для нескольких файлов (протестировано под tomcat 7.0.50).

Один из файлов: http://ftp.carnet.hr/misc/apache//xerces/j/source/Xerces-J-src.2.11.0-xml-schema-1.1-beta.zip

Есть ли у кого-нибудь лучшее решение этой проблемы (кроме удаления urlmapping)?

РЕДАКТИРОВАТЬ: Нет ошибки / исключение! Файл отображается в PrimeFaces FileUpload, но слушатель не запущен! JSF2.2 inputFile тоже не работает!

2 ответа

Я нашел решение для моей проблемы.

Проблема заключается в атрибуте действия форм, которые используются для загрузки. PrettyFaces изменяет атрибут действия на новый pretty-url.

Если вы измените атрибут action на реальный URL (тот, что с.xhtml,.jsf,...), загрузка файла снова будет работать, и запись allowCasualMultipartParsing="true" в файле контекста (tomcat) больше не нужна.

Чтобы изменить путь, поместите этот скрипт в представление (ваш xhtml-файл; необходим jquery):

<script type="text/javascript">
     $(document).ready(function() {
         $("form[enctype='multipart/form-data']").attr("action","#{request.contextPath}/test/fileupload.xhtml");
    });
</script>

Теперь загрузка файла работает для всех моих файлов, включая те, которые не работали (даже с решением allowCasualMultipartParsing="true").

Протестировано с Primefaces4.0 FileUpload-Component.

РЕДАКТИРОВАТЬ:
Есть ли другое лучшее решение?

В моем аналогичном проекте (JSF+JQuery+PrettyFaces/Rewrite) были вызваны функции action и listener, но функция setPart(Part part) не была вызвана (h:inputFile value="#{bean.part}).

Я нашел два решения, одно из них - добавить @MultipartConfig (а @WebServlet + расширяет HttpServlet) к bean-компонентам, которые получили загружаемые файлы Part. Тем не менее, просто добавление записи allowCasualMultipartParsing="true" было достаточно для моего проекта.

Другие вопросы по тегам