Primefaces数据表部分页面呈现不适用于<p:fileupload> </p:fileupload>

时间:2012-01-16 16:43:41

标签: java primefaces

我有一个p:fileUpload可以正常工作。但是我需要在上传新文件后对p:datatable进行部分页面渲染。数据表显示当前文件。

奇怪的是,一旦我上传了一个文件,就会重新呈现该表,显示一条记录。但第二次没有重新呈现该表,尽管代码显示有2个条目。这让我大吃一惊,我花了一整天时间试图让这个工作。目前我有一个使用ui的解决方法:重复。

这是代码

    <h:outputLabel value="Files Upload" style="font-weight: bold;" />
    <p:fieldset>

      <p:fileUpload id="iconUpload" update="@form"
        fileUploadListener="#{appCreateController.processUpload}"
        image="/resources/gfx/file_browse_normal.png"
        allowTypes="*.jpg;*.png;*.gif;*.doc;*.exe;*.msi"
        description="Icon">
      </p:fileUpload>

   </p:fieldset>
   <p:message for="iconUpload" />

   <p:dataTable var="appFile" id="appFiles"
    value="#{appCreateController.uploadedFiles}" rows="10">
    <p:column>
    <f:facet name="header">
    <h:outputText value="Name" />
    </f:facet>
       <h:outputText value="#{appFile.uploadedFile.fileName}" />
    </p:column>
        <p:column>
    <f:facet name="header">
    <h:outputText value="Content Type" />
    </f:facet>
    <h:outputText value="#{appFile.uploadedFile.contentType}" />
    </p:column>
    <p:column>
    <f:facet name="header">
    <h:outputText value="File Type" />
    </f:facet>
    <h:selectOneMenu value="#{appFile.uploadedFileType}" id="fileType">
    <f:selectItems var="uploadedFileType"
          value="#{appCreateController.uploadedFileTypes}"
      itemLabel="#{uploadedFileType.name}" />
      </h:selectOneMenu>
    </p:column>
    <p:column>
       <f:facet name="header">
    <h:outputText value="Size" />
    </f:facet>
    <h:outputText value="#{appFile.size}" />
    </p:column>
   </p:dataTable>

支持bean代码:

    public void processUpload(FileUploadEvent event)
            throws AbortProcessingException {

        log.debug("Uploading file: " + event.getFile().getFileName());

        UploadedFileVO uploadedFileVO = new UploadedFileVO();
        uploadedFileVO.setUploadedFile(event.getFile());

        uploadedFiles.add(uploadedFileVO);

        log.debug("Uploaded file: " + event.getFile().getFileName());

        log.debug("file list now contains file : " + uploadedFiles.size());
    }

    public List<UploadedFileVO> getUploadedFiles() {

        log.debug("Getting uploadedFiles. Total == " + uploadedFiles.size());

    return uploadedFiles;
  }


    public UploadedFileType[] getUploadedFileTypes() {
     return UploadedFileType.values();
   }

希望有人知道解决方案:)

干杯, 科恩

1 个答案:

答案 0 :(得分:1)

好的,我尝试使用2.2.1并将此问题升级到3.0.1。问题仍然发生在3.0.1但现在已修复。

显然,JSF引擎没有看到数据表的内容发生了变化,因为已经通过辅助bean中的另一个方法调用了getter。

我有另一个方法,它在xhtml页面之前调用了getUploadedFiles(),不知怎的,这影响了数据表的重新填充。