Загрузка файлов и 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" было достаточно для моего проекта.