powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Primefaces 4.x FileUpload Слушатель никогда не вызывается
11 сообщений из 11, страница 1 из 1
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38510654
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Решил предыдущий вопрос перенести в новую тему, потому как и понимания проблемы больше стало
и вопросов не уменьшилось. А дело в том, что по не понятной для меня причине слушатель Primefaces 4.x
FileUpload не вызывается. Как следствие не могу получить доступ к загружаемому файлу на стороне сервера.
Немного предыстории по коду ... Среда разработки следующая:
JBoss Application Server 7.1.1
JDK 1.7
CDI 1.0
Mojarra 2.1.7
JSF 2.2
PrimeFaces 4.0
Commons io version: 2.4
Commons fileupload version: 1.3
Firefox 26.0

Компонента <p:fileUpload> специально выведена отдельную XHTML форму:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pe="http://primefaces.org/ui/extensions"> 
    <h:head>
	    <h:outputStylesheet library="stylesheet" name="theme.css"/>  
	    <h:outputStylesheet library="stylesheet" name="customshop.css"/>
    </h:head>
    <h:body>
	<h:form enctype="multipart/form-data">
		<pe:ajaxErrorHandler/>
		<p:fileUpload id="fulId" fileUploadListener="#{fileUploadController.handleFileUpload}" mode="advanced" 
			update="messagesId" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>  
	        <p:growl id="messagesId" showDetail="true"/>  
	</h:form>
	</h:body>
</html>


для этой формы специально создан бин:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@SessionScoped 
@Named
public class FileUploadController implements Serializable {
	private static final long serialVersionUID = 1L;
	
	public void handleFileUpload(FileUploadEvent event) {  
		System.out.println("handleFileUpload(FileUploadEvent event)");
	        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");  
	        FacesContext.getCurrentInstance().addMessage(null, msg);  
	    } 
}


... ожидаемого результата в виде отработки System.out.println("handleFileUpload(FileUploadEvent event)") из
handleFileUpload(FileUploadEvent event) не получаю. Следовательно делаю вывод о том, что слушатель не работает.
... При всем при этом заметил одну интересную вещь. Сам p:fileUpload вроде как работает, потому как я могу
выбрать файл-картинку, нажать кнопку "открыть" и увидеть его минимизированное отражение в p:fileUpload.
А по сему делаю вывод о том, что в моем случае работает только клиентская сторона. А сам файл на сервер не
передается ... Вопрос почему?
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38510659
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Два дополнения к предыдущему сообщению:
Первое, ... в web.xml настраивал фильтр для FileUpload :
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<!-- PrimeFaces fileUpLoader -->
  <context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>auto|native|commons</param-value>
  </context-param>
  <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>
	<dispatcher>REQUEST</dispatcher>        
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>


... результат тот же самый, а точнее ни какой. Да и в доке написано что для PrimeFaces 4.0 этого
можно не делать. Поэтому исключил данный контекст из настроек web.xml

Второе, ... в браузере просматривал контекст того, что уходит на сервер в момент работы FileUpload -
получается что передается только сама XHTML страница, а файл-картинка не отправляется.
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512704
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... прихожу к выводу что это баг текущей версии as jboss 7.1 под jsf 2.0

вероятно можно попробовать следующие 2-а варианта:
1. мигрировать на jsf 2.2 ( https://community.jboss.org/thread/203257?start=0&tstart=0)
2. перейти на as jboss WildFly 8 CR1 ( http://wildfly.org/news/2013/12/21/WildFly8-CR1-Released/)
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512843
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dutchman...
1. мигрировать на jsf 2.2 ( https://community.jboss.org/thread/203257?start=0&tstart=0)

Из того же поста получается, что jboss 7.1 и 7.2 в принципе не могут поддерживать jsf 2.2.
Остается второй вариант
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512925
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зачем так категорично?
Во-первых, надо выбрать способ:
Код: xml
1.
2.
3.
4.
  <context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>auto|native|commons</param-value>
  </context-param>


Из 3 предложенных значений надо выбрать одно, на не все 3 указывать!
Смотрим в документацию:
auto - для jsf 2.2. fboss as 7.1 поставляется с jsf 2.0, значит, если хотим использовать его, то надо jsf 2.2 вставлять в проект, либо патчить сервер. Сложно - выбираем из оставшихся 2-х

native - работает на servlet 3.x Part API. Какая версия вашего приложения - история умалчивает, поэтому оставляем 3-й вариант, который работает везде:

commons - использует commons-fileupload и работает везде. Тоже не все так просто, надо добавить зависимость в проект и описать фильтр, как указано в доке. Зато будет гарантированно работать везде

Итак, зависимсти в pom.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		<dependency>
			<groupId>org.primefaces</groupId>
			<artifactId>primefaces</artifactId>
			<version>4.0</version>
		</dependency>  
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3</version>
		</dependency>


Что необходимо добавить в web.xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <context-param>
        <param-name>primefaces.UPLOADER</param-name>
        <param-value>commons</param-value>
    </context-param>
    <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>
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512973
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слишком бегло взглянул на документацию, хотя выводы и правильные. Лучше все-таки правильно изложить выбор auto|native|commons. По сути всего 2 аплоадера - native и commons, а auto просто детектирует, какой лучше применить
native - требует наличия jsf 2.2 и servlet 3.x Part API

commons - использует commons-fileupload
Получается, что для jboss 7.1.1 что указывай auto, что ничего не указывай - все равно будет выбрано commons (из-за jsf). Поэтому добавляйте зависимость в проект и фильтр в web.xml, а параметр primefaces.UPLOADER можно не указывать, либо указать одно из 2-х: auto|commons
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512982
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый ivanra,

насколько важно указывать зависимости в pom.xml ?
Вопрос связан с тем, что в проекте не используется maven.
Сборка ведется стандартными механизмами Эклипса.
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512992
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый ivanra,

Большое Вам человеческое спасибо !!! Настроил primefaces.UPLOADER как
<param-value>commons</param-value> и все сработала как Вы и говорили.
Еще раз Спасибо и с наступающим Новым Годом !!!
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38512995
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dutchmanнасколько важно указывать зависимости в pom.xml ?
Вопрос связан с тем, что в проекте не используется maven.
Сборка ведется стандартными механизмами Эклипса.
Придется вручную собирать все зависимости в папку lib проекта. Хотя, в данном случае повезло - commons-fileupload зависит только от commons-io, а этот модуль по-моему, есть в модулях сервера
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38513739
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanracommons-fileupload зависит только от commons-io, а этот модуль по-моему, есть в модулях сервера
на 7.1 есть несколько библиотек комонс, но этого вроде нету
...
Рейтинг: 0 / 0
Primefaces 4.x FileUpload Слушатель никогда не вызывается
    #38513800
Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rema174,

согласен, я их отдельно в lib добавил
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Primefaces 4.x FileUpload Слушатель никогда не вызывается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]