простые лица JSF P: fileUpload не может получить ответ - PullRequest
0 голосов
/ 09 ноября 2011

У меня проблема с <p:fileUpload> PrimeFaces. Я создал страницу Facelet для загрузки файла Excel, как показано ниже:

<p:fileUpload fileUploadListener="#{blackListImportBean.xlsFileUpload}"
    multiple="true" allowTypes="*.xls;*.xlsx" description="*.xls;*.xlsx" 
    sizeLimit="100000"/>
<h:commandButton actionListener="#{blackListImportBean.test}" 
    value="#{msg.SAVE}" action="test-page.xhtml" />

И Java-код бобов, как показано ниже:

public void xlsFileUpload(FileUploadEvent event){
    // ...
}

public void test() {
    // ...
}

Когда я нажимаю кнопку, вызывается метод test(), а метод xlsFileUpload() не вызывается, и появляется сообщение об ошибке, что он не может найти метод xlsFileUpload(), так как метод нуждается в параметре. Когда я удаляю параметр, страница не может найти метод. Еще одна проблема, которая меня смутила, это то, что я не могу получить файл загрузки. Я сделал это согласно документации, и я не знаю, что мне делать.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

Два вопроса:

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) на пути, и есть вероятность, что это вызывает вашу проблему.

0 голосов
/ 10 ноября 2011

Не забудьте добавить это в ваш 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>
...