Загрузка файла PrimeFaces

Я использую jsp/Servlet в проекте и решил перейти на JSF с помощью PrimeFaces. Я столкнулся с проблемой при попытке загрузить файл с помощью элемента управления загрузкой файлов PrimeFaces, а затем, когда я настроил его в web.xml, он работал хорошо, проблема теперь, когда все старые способы загрузки файлов jsp не работают:

 DiskFileUpload upload = new DiskFileUpload();
 List items = upload.parseRequest(request);

person shadyakl    schedule 24.12.2012    source источник


Ответы (1)


Действительно, HTTP-запрос может быть проанализирован только один раз. Клиент не будет отправлять его во второй раз, если вам нужно дважды проанализировать его. Ваша проблема указывает на то, что фильтр загрузки файла PrimeFaces по какой-то причине также вызывается для простого запроса JSP/Servlet и, таким образом, анализирует загрузку для JSF до того, как простой JSP/Servlet получит возможность проанализировать его для собственного использования. Этого не должно происходить.

Вам необходимо сопоставить фильтр загрузки файлов PrimeFaces только с запросами JSF, а не с простыми запросами JSP/Servlet. Обычно вы добиваетесь этого, сопоставляя его с FacesServlet.

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

(<servlet-name> должно быть точно таким же значением, которое использовалось в <servlet> определении класса FacesServlet; очевидно, что <filter-name> точно такое же значение, которое использовалось в <filter> определении класса фильтра загрузки файлов)

Или, если этот старый подход загрузки файлов JSP/Servlet использовался прямо на странице JSF по какой-то неочевидной причине, вам необходимо сопоставить фильтр загрузки файлов PrimeFaces с более конкретным шаблоном URL, охватывающим только страницы, содержащие компонент загрузки файлов PrimeFaces. .

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <url-pattern>/upload.xhtml</url-pattern>
</filter-mapping>

(если вы сопоставили FacesServlet, например, с *.jsf вместо *.xhtml, вам, очевидно, следует изменить шаблон URL на /upload.jsf)

Обратите внимание, что вы можете указать несколько записей <url-pattern> в одном отображении фильтра, что полезно в случае, если у вас есть несколько страниц, содержащих компонент загрузки файлов PrimeFaces.

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <url-pattern>/upload1.xhtml</url-pattern>
    <url-pattern>/upload2.xhtml</url-pattern>
    <url-pattern>/upload3.xhtml</url-pattern>
</filter-mapping>
person BalusC    schedule 24.12.2012