我有一个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();
}
希望有人知道解决方案:)
干杯, 科恩
答案 0 :(得分:1)
好的,我尝试使用2.2.1并将此问题升级到3.0.1。问题仍然发生在3.0.1但现在已修复。
显然,JSF引擎没有看到数据表的内容发生了变化,因为已经通过辅助bean中的另一个方法调用了getter。
我有另一个方法,它在xhtml页面之前调用了getUploadedFiles(),不知怎的,这影响了数据表的重新填充。