私は 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()メソッドはアップロードされたファイルを取得し、オブジェクトのリストであるworkという名前のプロパティに保存します。
ページの後半 (同じh:form内) に、処理が必要なアップロード済みファイルを示すデータ テーブルがあります。
<p:dataTable
value="#{uploadImage.work}"
var="unit"
resizableColumns="true"
rendered="#{not empty uploadImage.work}">
問題は、アップロードされたファイルの数に関係なく、データ テーブルが 1 回だけ再描画されることです。各ファイルに対して doUpload()メソッドが呼び出されます。そのため、コンポーネントの[アップロード] ボタンをクリックすると、 p:dataTableが表示されますが、何があっても 1 行しかありません。画面を更新すると、すべての行が表示されます。
doUpload()が終了するたびにp:dataTableを再レンダリングする方法はありますか?