我在用,
我在XHTML页面上有这个fileUpload组件。
<h:form enctype="multipart/form-data">
<p:fileUpload id="txtCatImage"
value="#{testManagedBean.uploadedFile}"
mode="advanced"
sizeLimit="100000"
multiple="false"
showButtons="true"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
fileUploadListener="#{testManagedBean.fileUploadListener}"/>
<p:message for="txtCatImage" showSummary="false"/>
<p:commandButton id="btnSubmit"
actionListener="#{testManagedBean.insert}"
icon="ui-icon-check" value="Save"/>
</h:form>这是对应的托管bean。
@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable {
private UploadedFile uploadedFile;
private static final long serialVersionUID = 1L;
public TestManagedBean() {}
public UploadedFile getUploadedFile() {
return uploadedFile;
}
public void setUploadedFile(UploadedFile uploadedFile) {
this.uploadedFile = uploadedFile;
}
public void fileUploadListener(FileUploadEvent event) {
uploadedFile = event.getFile();
System.out.println("fileUploadListener invoked.");
}
public void insert() {
if (uploadedFile != null) {
System.out.println(uploadedFile.getFileName());
} else {
System.out.println("The file object is null.");
}
}
}前面提到的文件上传监听器- fileUploadListener()从未被调用过。
文件上载筛选器在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>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>我在类路径中添加了Apache-commons-fileupload和Apache-commons-io。在我使用Spring / JSF的早期项目中,同样的情况也是如此。
我看不出我在这里错过了什么。它必须对服务器的版本做些什么吗?
发布于 2013-09-15 20:29:05
这很可能是因为Primefaces 4是与Glassfish 4 (Java 7)中最新的JSF标准兼容的唯一一个。PrimeFaces3.5适用于玻璃鱼3.1.2.2 (Java 6)
有更多的人有这个问题。
9月16日星期一将推出PrimeFaces4.0 RC1,所以如果你真的想要GF 4,你应该试一试。
编辑:
参考资料:Glassfish 4, JSF 2.2 and PrimeFaces FileUploadEvent not working together
用户可以自行决定RC是否适合他。我刚刚向他提出了这个建议,因为这是目前唯一的办法。
发布于 2013-09-20 04:22:57
如果您使用Primefaces上传,您必须注意以下情况。
ajax请求,这意味着您必须在<p:commandButton...>.Otherwise中放置ajax="false"属性,使用<h:commandButton>。Session Scope。否则,您必须在临时存储中写入文件,并使用此文件路径显示动态映像。参考是here
https://stackoverflow.com/questions/18817044
复制相似问题