2010-12-08 4 views
14

Я отправил свой вопрос на форум Primefaces, но никто не ответил, поэтому я решил, что попробую здесь.Primefaces FileUpload event not firing - JSF 2.0

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

+1

Загрузка файла PF 2.1 на Tomcat 7.0.5 также не работает. Я вижу «ViewExpiredException» в журналах сервера на каждом загрузка файлов. Форумы PF сообщают об этом по нескольким темам: «работает на Tomcat 6, но не на Tomcat 7». Вы видите что-либо в журналах сервера? – BalusC 2010-12-08 14:42:43

+0

Он не показывал никаких исключений в журналах сервера для меня. просто ничего не показывает. Но это не хорошая новость. Есть ли альтернатива этому, чтобы я мог подняться oad файлы? Это важная часть моего приложения. – DesireToUpload 2010-12-08 14:48:55

ответ

19

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

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


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

<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(), поскольку его можно читать только один раз.

2

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

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

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

3

У меня также возникла аналогичная проблема. Исправление для меня (с помощью проекта 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

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

<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/лица-config.xml дескриптор присутствует.

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

Jboss 6.1.0.Final/PrimeFaces 3.0.RC2

3

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

<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> 

aditionaly, если вы используете 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> 
1

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

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