首先,我不得不说,我已经阅读了这里和 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/