私はp:fileUploadがうまく動作します。しかし、新しいファイルがアップロードされた後、p:datatableの部分ページレンダリングが必要です。データテーブルには現在のファイルが表示されます。Primefaces datatable部分ページレンダリングが<p:fileUpload>と動作しません
これは奇妙なことですが、1つのファイルをアップロードすると、テーブルが再レンダリングされ、1つのレコードが表示されます。しかし、テーブルが再レンダリングされない2回目は、コードには2つのエントリがあることが示されています。これは私の心を吹いている、私は一日を費やしてこの作業をしようとしている。現時点では、私はui:repeatを使用した回避策があります。ここで
は、コードBeanコードをバックアップ
<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>
は次のとおりです。
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();
}
ホープ誰もが解決策:)私が試した
乾杯、OK コーエン
おそらく 'update = @ form'を使う代わりに' update = [formid]:appFiles'を使うことができます。また、私はUploadedFileVOがPrimefacesのアップロードされたファイルの単純なラッパーであると仮定します。このように割り当てることで、すべてのラッパーオブジェクトが実際に同じアップロードされたファイルを指している可能性があります。ラッパーの 'equals'と' hashCode'をオーバーライドし、 'uploadedFiles'が集合コレクションである場合、両方のファイルが等しいとみなし、コレクション内のファイルのみを保持することができます。 –
... JSFのどのバージョンと実装を使用していますか、どのバージョンのPrimefaceを使用していますか? –
OK、2.2.1で試してみましたが、3.0.1にアップグレードしました。今は修正されています。私はxhtmlページの前にgetUploadedFiles()という別のメソッドがありましたが、何とかこれがデータテーブルの再作成に影響を与えました。 –