Событие PrimeULL FileUpload не запускается - JSF 2.0 - PullRequest
14 голосов
/ 08 декабря 2010

Я разместил свой вопрос на форуме Primefaces, но никто не ответил, поэтому я решил попробовать здесь.

Я пытался заставить fileUpload работать некоторое время. В настоящее время я использую сборку RC2 с mojarra 2.0.3 и Tomcat 7.

У меня есть диалог, который будет содержать компонент fileUpload следующим образом.

<p:dialog id="uploadFileDialog" >
   <h:form id="uplaodFileForm" prependId="false" enctype="multipart/form-data">
       <p:fileUpload fileUploadListener="#{fileUploadController.uploadFile} auto="true"/>    
   </h:form>
</p:dialog>

fileUploadController выглядит следующим образом

public class FileUploadController {
    public void uploadFile(FileUploadEvent event) {
         byte[] file = event.getFile().getContents();

         System.out.println("MADE IT INTO FILE UPLOAD !!! ");
    }
}

По какой-то причине, когда файл загружен, он никогда не запускает fileUploadEvent и никогда не попадает в контроллер. Загрузка выглядит так, как будто она работает, флэш-часть визуализируется и создает впечатление, что она что-то делает, но никакой вспомогательный компонент не вызывается. Я могу понять, что я делаю неправильно, и я прочитал почти каждый пост о загрузке файла с использованием простых символов. Кто-нибудь знает, что я делаю не так?

Ответы [ 6 ]

19 голосов
/ 08 декабря 2010

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream

PrimeFaces fileupload использует Apache Commons FileUpload под обложками, что, в свою очередь, имеет другую зависимость, Apache Commons IO . Убедитесь, что у вас есть оба JAR в вашем /WEB-INF/lib.


Обновление : в соответствии с комментариями также необходимо убедиться, что фильтр загрузки был объявлен в web.xml согласно руководству пользователя :

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

И вам также нужно убедиться, что в web.xml нет других фильтров до , которые могут считывать HttpServletRequest#getInputStream(), потому что он может быть прочитан только один раз.

3 голосов
/ 16 июля 2012

это правильно, вы должны добавить

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

И позже это

<!-- JSF mapping -->
<servlet>
   <servlet-name>Faces Servlet</servlet-name>
   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<!-- Map these files with JSF -->
<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

дополнительно, если вы используете maven, добавьте эту зависимость

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.1</version>
</dependency>     
<dependency>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-io</artifactId>
     <version>1.3.2</version>
</dependency>
<dependency>
     <groupId>portlet-api</groupId>
     <artifactId>portlet-api</artifactId>
     <version>1.0</version>
</dependency>
3 голосов
/ 01 декабря 2011

Я также столкнулся с подобной проблемой. Для меня (с помощью проекта Maven) было исправлено добавление следующих зависимостей в файл pom.xml:

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.1</version>
    </dependency>

Это эквивалентно наличию соответствующих файлов .jar в вашем WEB-INF / lib, поэтому попробуйте сделать это, если это не проект Maven.

2 голосов
/ 09 января 2012

У меня та же проблема, я решил ее, добавив

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

, как сказал BalusC.

, но добавив:

<!-- JSF mapping -->
<servlet>
   <servlet-name>Faces Servlet</servlet-name>
   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<!-- Map these files with JSF -->
<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Потому что по умолчаниюв J2EE 6 эта часть является необязательной. Сервлет JSF 2.0 активируется автоматически при наличии дескриптора WEB-INF /face-config.xml.

Но необходимо правильно активировать PrimeFaces Filter

Jboss 6.1.0.Final / PrimeFaces 3.0.RC2

2 голосов
/ 22 декабря 2010

я думаю, что решил вашу проблему.Проверьте в своем web.xml наличие:

<context-param>
    <param-name>com.sun.faces.enableViewStateIdRendering</param-name>
    <param-value>false</param-value>
</context-param>

Вы должны удалить эту опцию или установить для нее значение True (значение по умолчанию).

1 голос
/ 14 ноября 2013

В Websphere 7 событие вызывается, потому что когда я выбираю файл и нажимаю кнопку загрузки, я вижу полосу загрузки, которая растет.Проблема в том, что в Websphere 7 я предполагаю, что есть фильтр, который использует HttpRequest, и когда поступает в прослушиватель событий, только потребляется, поэтому не имеют данных: (

Нет сообщений в журнале, отладка оченьусложнить. Существует некоторая трассировка или логгер для включения в JSF 2 Mojarra 2 и PrimeFaces 3.4.2?

...