首先,我必须说,我在这里以及关于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));
}
如果我点击选择,我可以选择一个文件,但之后没有任何反应。未调用处理程序,因为没有日志消息,上载文件按钮处于非活动状态。我之前使用过这个组件可以解决更复杂的问题而没有问题,所以我肯定我错过了一些明显的东西。
提前感谢您的任何帮助!
答案 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>
另外,请尝试以自己的形式上传文件。