0

我正在使用,

  • 玻璃鱼 4.0
  • JSF 2.2
  • 莫哈拉 2.2.0
  • Primefaces 3.5

fileUpload在 XHTML 页面上有这个组件。

<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 项目中也有效。

我看不到我在这里缺少什么。它是否与服务器的版本有关?

4

2 回答 2

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 和 PrimeFaces FileUploadEvent 不能一起工作
用户可以自行决定 RC 是否足够好是否适合他。我刚刚向他提出了建议,因为这是目前唯一的方法。

于 2013-09-15T20:29:05.967 回答
-1

如果您使用Primefaces上传,则必须注意以下情况。

  1. 不要使用ajax请求,这意味着您必须将ajax="false"属性放入您的<p:commandButton...>. 否则,使用<h:commandButton>.
  2. 如果要显示动态图像,backing bean 的范围必须是Session Scope. 否则,您必须将文件写入临时存储并使用此文件路径显示动态图像。

参考在这里

于 2013-09-20T04:22:57.040 回答