Jsf 2 通过AJAX使用p:fileUpload

Jsf 2 通过AJAX使用p:fileUpload,jsf-2,primefaces,Jsf 2,Primefaces,我正在使用PrimeFacesp:fileUpload按照手册将图像传输到备份bean,如下所示: <h:outputLabel value="Select Files:" /> <p:fileUpload fileUploadListener="#{uploadImage.doUpload}" multiple="true"

我正在使用PrimeFacesp: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()方法将上载的文件保存到名为work的属性中,该属性是一个对象列表

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

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

问题是,不管上传多少文件,数据表只重绘一次。将调用每个文件的doUpload()方法。因此,当我单击组件上的上载按钮时,会出现p:dataTable,但无论发生什么情况,其中只有一行。如果我刷新屏幕,所有行都会出现

每次退出doUpload()时,是否有方法重新呈现p:dataTable

使用primefaces组件更新服务器端的dataTable。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

  }

为了避免显而易见的问题,bean是视图范围的,对吗?@BalusC No它是请求范围的bean,work属性存储在会话映射中。我尝试使用flash地图,但由于某种原因,在这里不起作用。但这是不同的主题。(我不能使用视图作用域,因为我正在使用CDI构建bean。)哦,也许你在会话作用域中存储上传的文件的方式不对?@BalusC正如我所指出的,如果我在浏览器上刷新页面,那么数据表中就有我希望看到的所有对象。更重要的是,由于我被迫使用会话范围而不是flash,我可以离开屏幕,稍后再回来,对象都在那里。因此,我并不关心我试图显示的对象的持久性。Hello@BalusC我希望该属性中的model=true属性不是由组件中的primefaces提供的。。给我你的任何建议,这是迷人的,但它不适合我。查看Primefaces文档,它应该有,但我认为正在发生的是,在第一次上传后,我只得到一个AJAX响应,但在那之后就没有了。我会继续戳这个,但是谢谢你的提示。