2013-09-15 2 views
0

Я использую,р: fileUploadListener не вызывается

  • GlassFish 4.0
  • JSF 2,2
  • Mojarra 2.2.0
  • Primefaces 3,5

У меня есть этот компонент fileUpload на странице XHTML.

<h:form enctype="multipart/form-data"> 

    <p:fileUpload id="txtCatImage" 
        value="#{testManagedBean.uploadedFile}" 
        mode="advanced" 
        sizeLimit="100000" 
        multiple="false" 
        showButtons="true" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
        fileUploadListener="#{testManagedBean.fileUploadListener}"/> 

    <p:message for="txtCatImage" showSummary="false"/> 

    <p:commandButton id="btnSubmit" 
        actionListener="#{testManagedBean.insert}" 
        icon="ui-icon-check" value="Save"/> 
</h:form> 

Это соответствующий управляемый bean-компонент.

@ManagedBean 
@ViewScoped 
public final class TestManagedBean implements Serializable { 

    private UploadedFile uploadedFile; 
    private static final long serialVersionUID = 1L; 

    public TestManagedBean() {} 

    public UploadedFile getUploadedFile() { 
     return uploadedFile; 
    } 

    public void setUploadedFile(UploadedFile uploadedFile) { 
     this.uploadedFile = uploadedFile; 
    } 

    public void fileUploadListener(FileUploadEvent event) { 
     uploadedFile = event.getFile(); 
     System.out.println("fileUploadListener invoked."); 
    } 

    public void insert() { 
     if (uploadedFile != null) { 
      System.out.println(uploadedFile.getFileName()); 
     } else { 
      System.out.println("The file object is null."); 
     } 
    } 
} 

Слушатель загрузки файлов, как упоминалось, - fileUploadListener() никогда не вызывается.

Фильтр загрузки файлов отображается в 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> 

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

Я добавил Apache-commons-fileupload и Apache-commons-io к классам. То же самое работает в моем предыдущем проекте с Spring/JSF.

Я не вижу, что мне здесь не хватает. Нужно ли что-то делать с версией сервера?

+0

* Я добавил Apache-Викисклад FileUpload и Apache-Викисклад ИО пути к классам. * Как именно вы сделали этот шаг? Есть много способов сделать это, из которых, в свою очередь, многие ошибочны для ВОЙНЫ. Вы подтвердили, что эти JAR-файлы попали в папку '/ WEB-INF/lib' встроенного/развернутого WAR-файла? – BalusC

+0

Я только что проверил их. После развертывания приложения оба файла jar присутствуют в '$ Project/Project-war/build/web/WEB-INF/lib' – Tiny

+0

Хорошо.Что делать, если вы удалите/отключите все связанные с безопасностью фильтры и прочее? (просто чтобы исключить их из-за причины) Что делать, если вы попробуете JSF 2.1 вместо этого? (JSF 2.2 поставляется с собственным собственным файловым загрузчиком файлов, не уверен, как работает PrimeFaces 3.5, никогда не пробовал сам). – BalusC

ответ

3

Это, скорее всего, потому, что Primefaces 4 является единственным, совместимым с последним стандартом JSF, присутствующим в Glassfish 4 (Java EE 7). Primefaces 3.5 работает с Glassfish 3.1.2.2 (Java EE 6)
Было много людей, имеющих эту проблему.
понедельник 16 сентября будет запущен Primefaces 4.0 RC1, так что вы должны попробовать, что если вы действительно хотите GF 4.

Edit:
Ссылка: Glassfish 4, JSF 2.2 and PrimeFaces FileUploadEvent not working together
Пользователь может решить самостоятельно, если RC достаточно хорошо для него или нет. Я только что предложил его ему, потому что это единственный способ на данный момент.

+0

«Primefaces 4 является единственной совместимой с последним стандартом JSF, присутствующим в Glassfish 4 (Java EE 7), можете ли вы опубликовать любую цитату об этом факте? «Понедельник, 16 сентября, будет запущен Primefaces 4.0 RC1», который является кандидатом на выпуск, возможно, переход на бета-версию на самом деле не является выбором для OP. «Было больше людей, имеющих эту проблему» то же самое, вам нужна ссылка здесь. –

+0

Ссылка, которую вы опубликовали, говорит о JSF 2.2, в то время как пользователь говорит, что использует 2.0. Appart от этого я не вижу ничего связанного с Java EE 7 в этой ссылке. Почему это не может быть проблемой только со стеклянной рыбкой? –

+0

Ну ... не комментируйте, если вы не знаете, как работает Java EE. Glassfish 4 = Java EE 7 -> JSF 2.2 Glassfish 3.1.2 = Java EE 6. Вы не можете использовать старую версию JSF с GF4. Вы должны использовать GF 3.1.2 для предыдущего, точно так, как я предложил. Primefaces 3.5 не совместим с Java EE 7. – zmirc

-1

Если вы используете загрузку Primefaces, вам необходимо позаботиться о следующей ситуации.

  1. Не используйте ajax запрос, что средний, вы должны поставить ajax="false" атрибут в вашей <p:commandButton...> .otherwise используйте <h:commandButton>.
  2. Если вы хотите отобразить динамическое изображение, объем компонента бэкэнда должен быть Session Scope. В противном случае вы должны записать файл во временном хранилище и использовать этот путь к файлу для отображения динамического изображения.

Reference является here

+3

1. неверно. OP использует 'mode =" advanced "'. Ajax следует отключать только на 'mode =" simple "'. – BalusC

Смежные вопросы