Primefaces 4 fileUpload处理程序未调用

时间:2014-01-08 13:04:53

标签: java spring primefaces jsf-2.2

首先,我必须说,我在这里以及关于fileuploader问题的primefaces论坛上阅读了所有(至少很多:))问题。

我的配置:

Primefaces 4

JSF 2.2

弹簧

Apache Tomcat 7

的Maven

我正在将richfaces项目转换为primefaces,并且我遇到了一个没有调用处理程序方法的fileUpload组件。

我已经尝试过(尽管我知道从Primefaces 4开始没有必要)将过滤器放在web.xml中。我也试过没有过滤器。我有春季安全过滤器和其他一些语言过滤器,但PF是第一个。我也尝试过将调度员设置为FORWARD。

我拥有Maven所需的所有家属(公共区域 - 我知道从版本4开始,它不是必需的,但我还是试过了)

xhtml部分:

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

        ... /* not relevant code here */ ...

                            <p:graphicImage value="#{systemParamsController.image}"
                                id="logo" />

                            <p:fileUpload
                                fileUploadListener="#{systemParamsController.listener}"
                                fileLimit="1" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                                uploadLabel="#{msg['button.upload.jpg']}"
                                cancelLabel="#{msg['button.cancel']}"
                                invalidFileMessage="alert('#{msg['upload.invalidtype']}');"
                                update="logo" mode="advanced">
                            </p:fileUpload>
                            <p:growl id="messages" showDetail="true" />
                        </h:panelGrid>
                    </h:panelGroup>
                    <p:commandButton value="#{msg['button.save']}" onclick="this.disabled=true"  oncomplete="this.disabled=false"
                        action="#{systemParamsController.save}" styleClass="qs-button"
                        ajax="false" />
                </h:panelGrid>
            </p:panel>
        </center>
    </h:form>

支持bean:

public synchronized void listener(FileUploadEvent event) throws Exception {
  logger.debug("uploadListener!");
  UploadedFile item = event.getFile();
  getModel().getCustomer().setLogo(imageResizer.doResize(item.getContents(), 30, Side.HEIGHT));
}

如果我点击选择,我可以选择一个文件,但之后没有任何反应。未调用处理程序,因为没有日志消息,上载文件按钮处于非活动状态。我之前使用过这个组件可以解决更复杂的问题而没有问题,所以我肯定我错过了一些明显的东西。

提前感谢您的任何帮助!

1 个答案:

答案 0 :(得分:0)

确保将PrimeFaces FileUpload过滤器作为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>

如果您在使用默认的primefaces上传器时遇到问题,可以尝试使用commons文件上传:

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>commons</param-value>
</context-param>

我们正在使用这个Maven依赖:

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.1</version>
</dependency>

另外,请尝试以自己的形式上传文件。