2

私は 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を再レンダリングする方法はありますか?

4

1 に答える 1

2

サーバー側でデータテーブルを更新するには、primefaces RequestContext コンポーネントを使用します。例えば

  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

  }
于 2012-10-27T03:52:58.540 に答える