我正在使用,
我在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项目中有效。
我看不到我在这里失踪的东西。是否必须对服务器版本执行某些操作?
答案 0 :(得分:3)
这很可能是因为Primefaces 4是唯一一个与Glassfish 4(Java EE 7)中提供的最新JSF标准兼容的版本。 Primefaces 3.5适用于Glassfish 3.1.2.2(Java EE 6)
有更多人遇到这个问题
9月16日星期一将推出Primefaces 4.0 RC1,所以你应该尝试使用它,如果你真的想要GF 4.
编辑:
参考:Glassfish 4, JSF 2.2 and PrimeFaces FileUploadEvent not working together
用户可以自己决定RC是否足够好。我刚刚向他建议,因为这是目前唯一的方式。
答案 1 :(得分:-1)
如果您使用Primefaces
上传,则必须注意以下情况。
ajax
请求,也就是说,您必须在ajax="false"
中添加<p:commandButton...>
属性。否则,请使用<h:commandButton>
。Session Scope
。否则,您必须将文件写入临时存储,并使用此文件路径显示动态图像。参考是here