【问题标题】:Primefaces 4 fileUpload handler not called [duplicate]Primefaces 4 fileUpload处理程序未调用[重复]
【发布时间】:2014-01-08 13:04:53
【问题描述】:

首先,我必须说,我已经阅读了这里和 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));
}

如果我点击选择,我可以选择一个文件,但之后什么都没有发生。没有调用处理程序,因为没有日志消息,上传文件按钮处于非活动状态。我以前使用过这个组件来解决更复杂的问题而没有问题,所以我确定我遗漏了一些明显的东西。

提前感谢您的任何帮助!

【问题讨论】:

  • 打开你最喜欢的 Javascript 控制台...它是否给出任何有意义的错误?你的backing bean的范围是什么?
  • :) 对 js 控制台提示表示感谢……invalidFileMessage 中的替换文本存在语法错误……非常感谢!

标签: java spring primefaces jsf-2.2


【解决方案1】:

确保您将 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>

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

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多