私は Primefaces 3.5 を使用していますが、かなり厄介な問題に遭遇しました。コンポーネントは xhtml で次のようになります。
<p:tab id="installApp" title="Install application">
<h:form enctype="multipart/form-data">
<p:panel header="Upload status" id="upld_status">
<p:dataTable id="errorTable" var="error"
value="#{applicationInstallerBean.uploadMsgs}">
<p:column headerText="Application">
<h:outputText value="#{error.filename}" />
</p:column>
<p:column headerText="Status">
<h:outputText value="#{error.errorMsg}" />
</p:column>
</p:dataTable>
</p:panel>
<p:remoteCommand name="clearPrevious" update="upld_status uploader" action="#{applicationInstallerBean.clearPrevious}" process="@this" />
<p:fileUpload id="uploader" multiple="true" dragDropSupport="true" onstart="clearPrevious()"
fileUploadListener="#{applicationInstallerBean.install}" uploadLabel="Install"
mode="advanced" update="@this upld_status" auto="false"
allowTypes="/(\.|\/)(zip)$/" styleClass="install_app_fileupload" />
</h:form>
<p:panel header="Help" toggleable="true">
<ui:include src="applicationInstallHelp.xhtml" />
</p:panel>
</p:tab>
今、私が経験している動作はかなり奇妙です:
最初の数回は、ドラッグ アンド ドロップ方式でファイルをアップロードしても問題なく動作します。数回アップロードした後、次のエラーは完全に不確定に見えます。
- [アップロード] ボタンを押すと FileUpload コンポーネントが消え、ページを更新したときにのみ再表示される
- アップロード中にonstartメソッドが何度も呼び出される
- 複数のファイルがアップロードされている場合、アップロードのステータスを含むテーブルが更新されないか、1 つのファイルしか表示されない
- また、ブラウザから、このページでスクリプトが実行されているというメッセージが表示され、中止または続行できます
私が試したこと:
h:form要素を削除します。これは、既にh:form要素が含まれているインデックス ファイルに含まれているためです。
結果:基本的に同じですが、コンポーネントに初めてファイルをドロップすると自動的にアップロードされますが、autoは false に設定されます。
また、ブラウザのキャッシュを空にしたり、アプリケーションを最初から再デプロイしたり、複数の電源をオフにしたりしましたが、すべてうまくいきませんでした。
私がアップロードしているファイルは 80k から 9mb です。
このことから、あまりにも多くのファイルをアップロードすると全体が狂ってしまうように見えますが、解決策は本当に思いつきません。どんな助けでも大歓迎です。
更新:テスト中に、最初のアップロード後にonstartメソッドが常に複数回起動することがわかりました。初めて1回だけ発射します。2 回目のアップロードでは約 7 ~ 10 回、3 回目ではセッションを終了するまで起動し続けるようです。これはかなり奇妙で、問題の根源である可能性があると思います。これに関するアイデアはありますか?
前もって感謝します!