primefaces JSF P:fileUpload无法获得响应

时间:2011-11-09 11:51:03

标签: jsf jsf-2 primefaces

我遇到了<p:fileUpload> PrimeFaces的问题。我创建了一个Facelet页面来上传Excel文件,如下所示:

<p:fileUpload fileUploadListener="#{blackListImportBean.xlsFileUpload}"
    multiple="true" allowTypes="*.xls;*.xlsx" description="*.xls;*.xlsx" 
    sizeLimit="100000"/>
<h:commandButton actionListener="#{blackListImportBean.test}" 
    value="#{msg.SAVE}" action="test-page.xhtml" />

和bean的java代码如下:

public void xlsFileUpload(FileUploadEvent event){
    // ...
}

public void test() {
    // ...
}

当我单击按钮时,调用方法test()并且不调用方法xlsFileUpload()并且错误提示它找不到方法xlsFileUpload(),因为该方法需要参数。当我删除参数时,页面找不到该方法。困扰我的另一个问题是我无法获取上传文件。我按照文档做了,我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

不要忘记在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>

答案 1 :(得分:0)

两个问题:

1)您使用的是Primefaces 2.X还是3.X?   2)堆栈跟踪上有什么?它可能包含有关原因的信息。

文件上传组件在其自己的事件序列上传文件,以便在用户触发文件上载时触发。这可以通过属性auto =“true”自动进行。或者,它会显示一个“上传”按钮,导致上传。因此,它与第二个动作分开,这是你的测试方法。

从它无法找到你的方法的事实来看,我猜不管bean是不受管理的还是你的环境不同步(干净的构建)。

另外,尝试一个简单的测试:

@ViewScope
public class TestBean
{
  public void handleFileUpload(FileUploadEvent evt)
  {
     System.out.println("Handling Upload: " + evt.getFile());
     UploadedFile upload = evt.getFile();
FacesContext.getCurrentInstance()
                .addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "File Uploaded", "This file is " + upload));
     . . . //do whatever here....
  }
}

// JSF Page

. . .
     <h:form>
        <p:messages id="messages" />
        <p:fileUpload 
          fileUploadListener="#{testBean.handleFileUpload}"   
          multiple="true" 
          allowTypes="*.*;" 
          update="messages"
        />
      </h:form>

. . .

如果设置了过滤器,您应该会看到为每个上传的文件显示的一系列消息。如果没有,您应该收到有用的错误消息。此外,请注意您在路径上需要相当数量的基本Apache库(CommonsFileUpload),并且可能导致您的问题。