使用p:fileUpload和AJAX

时间:2012-10-26 15:59:12

标签: jsf-2 primefaces

我使用PrimeFaces p:fileUpload 按照手册将图像传输到支持bean,如下所示:

                <h:outputLabel value="Select Files:" />
                <p:fileUpload fileUploadListener="#{uploadImage.doUpload}"
                                  multiple="true"
                                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                                  description="Select Images"                                      
                                  update="@form"
                                  />

该组件允许用户选择批量上传的文件数量,这非常方便。但是,在将它们存储在数据库之前,我希望用户输入更多信息(即图像标题),以便 doUpload()方法获取上传的文件并将其保存到名为的属性中。工作,这是一个对象列表。

在页面的后面(在同一个 h:form 中)我有一个数据表,显示需要处理的上传文件。

                <p:dataTable
                    value="#{uploadImage.work}"
                    var="unit"
                    resizableColumns="true"
                    rendered="#{not empty uploadImage.work}">

问题是数据表只重绘了一次,无论上传了多少文件。每个文件都会调用 doUpload()方法。因此,当我点击组件上的上传按钮时,会出现 p:dataTable ,但无论如何都只有一行。如果我刷新屏幕,则会显示所有行。

每次退出 doUpload()时,有没有办法重新呈现 p:dataTable

1 个答案:

答案 0 :(得分:2)

使用primefaces RequestContext组件更新服务器端的数据表。 e.g。

  public void myFileUploadListener(FileUploadEvent event){
   //All your processing goes here
   RequestContext reqContext = RequestContext.getCurrentInstance();  //get your hands on request context
   reqContext.update(":form:myDatatable"); //update the datatable for each execution

  }