Непрерывное событие Primefaces FileUpload - JSF 2.0
Я разместил свой вопрос на форуме 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 и никогда не попадает в контроллер. Загрузка выглядит так, как будто она работает, часть флэш-роли отображается и создает впечатление, что она что-то делает, но поддержка bean никогда не называется. Кажется, я могу понять, что я делаю неправильно, и я прочитал почти все сообщения о загрузке файла с использованием перформансов. Кто-нибудь знает, что я делаю неправильно?
Ответы
Ответ 1
java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
Загрузка файла PrimeFaces использует 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()
, нет других фильтров, поскольку он может быть прочитан только один раз.
Ответ 2
У меня также возникла аналогичная проблема. Исправление для меня (с использованием проекта 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.
Ответ 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>
Ответ 4
Думаю, я решил вашу проблему.
Проверьте на своем web.xml наличие:
<context-param>
<param-name>com.sun.faces.enableViewStateIdRendering</param-name>
<param-value>false</param-value>
</context-param>
Вы должны удалить эту опцию или установить ее True (значение по умолчанию).
Ответ 5
У меня такая же проблема, я решил ее, добавив
<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 Servlet автоматически активируется, когда присутствует дескриптор WEB-INF/faces-config.xml.
Но необходимо правильно активировать PrimeFaces Filter
Jboss 6.1.0.Final/PrimeFaces 3.0.RC2
Ответ 6
В Websphere 7 событие запускается, потому что, когда я выбираю файл и нажимаю кнопку "Отправить", я вижу, что вы можете загрузить его, чтобы он вырос.
Проблема в том, что в Websphere 7 я полагаю, что есть фильтр, который потребляет HttpRequest, и когда он поступает в прослушиватель событий, просто потребляется, поэтому нет данных: (
В журнале нет сообщений. Отладка очень сложна. Существует несколько следов или регистраторов, которые можно включить в JSF 2 Mojarra 2 и PrimeFaces 3.4.2?