Два вопроса:
1) Используете ли вы Primefaces 2.X или 3.X?2) Что находится на трассировке стека?Вероятно, он содержит информацию о том, почему.
Компонент загрузки файла загружает файл в своей собственной последовательности событий, поэтому он будет инициирован, когда пользователь инициирует загрузку файла.Это может быть автоматическим через свойство auto = "true".В качестве альтернативы он отображает кнопку «Загрузить», которая вызывает загрузку.Таким образом, он отделен от второго действия, являющегося вашим методом тестирования.
Судя по тому, что он не может найти ваш метод, я бы предположил, что либо bean-компонент неуправляем, либо ваша среда не синхронизирована (clean build).
Также попробуйте простой тест:
@ViewScope
public class TestBean
{
public void handleFileUpload(FileUploadEvent evt)
{
System.out.println("Handling Upload: " + evt.getFile());
UploadedFile upload = evt.getFile();
FacesContext.getCurrentInstance()
.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "File Uploaded", "This file is " + upload));
. . . //do whatever here....
}
}
// JSF Page
. . .
<h:form>
<p:messages id="messages" />
<p:fileUpload
fileUploadListener="#{testBean.handleFileUpload}"
multiple="true"
allowTypes="*.*;"
update="messages"
/>
</h:form>
. . .
Если установлен ваш фильтр, вы должны увидеть сериюсообщения отображаются для каждого загруженного файла.Если нет, вы должны получить полезное сообщение об ошибке.Кроме того, имейте в виду, что вам нужно достаточное количество базовых библиотек Apache (CommonsFileUpload) на пути, и есть вероятность, что это вызывает вашу проблему.