java - Primefaces 4 文件上传处理程序未调用

标签 java spring primefaces jsf-2.2

首先,我不得不说,我已经阅读了这里和 primefaces 论坛上有关文件 uploader 问题的所有(至少是很多:))问题。

我的配置:

Primefaces 4

JSF 2.2

Spring

Apache Tomcat 7

Maven

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

我已经尝试过(尽管我知道从 Primefaces 4 开始没有必要)将过滤器放入 web.xml 中。我也尝试过不加滤镜。我有 spring 安全过滤器和语言过滤器等,但 PF 是第一个。我还尝试将调度程序设置为 FORWARD。

我在 Maven 中拥有所有需要的依赖项(公共(public) - 我知道从版本 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));
}

如果我单击“选择”,我可以选择一个文件,但之后什么也没有发生。处理程序未被调用,因为没有日志消息,上传文件按钮处于非 Activity 状态。我之前曾使用过这个组件来解决更复杂的问题,没有出现任何问题,所以我确信我遗漏了一些明显的东西。

预先感谢您提供任何帮助!

最佳答案

确保您将 PrimeFaces FileUpload Filter 作为 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 uploader 时遇到问题,您可以尝试 commons fileupload:

<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>

另外,尝试将文件上传放入其自己的表单中。

关于java - Primefaces 4 文件上传处理程序未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20996494/

相关文章:

java - ClassOne 中的 doSomething() 无法实现 InterfaceOne 中的 doSomething(),尝试分配较弱的访问权限,已公开

java - 文本对齐格式不正确

java - 字符串不变性

java - SQL 合并与 Java 中的检查和插入/更新

java - 如何禁用内联 p :calendar (primefaces)

java - 多条件案件怎么办?

java - Spring : Schedule a task which takes a parameter

java - Mybatis-Spring Java配置@MapperScan注解

Primefaces 对话框框架 Liferay

jsf - 显示p :dataTable Row Numbers