我正在使用 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方法在上传过程中被调用了很多次
- 上传多个文件时,包含上传状态的表格不刷新或仅显示其中一个文件
- 我还从浏览器收到一条消息,说明此页面上正在运行脚本,我可以中止或继续
我试过的:
删除h:form元素,因为这是索引文件中的一个包含,其中已经有一个h:form元素
结果:基本相同,不同的是,第一次将文件拖放到组件上会自动上传,但auto设置为 false
我也尝试过清空浏览器缓存,从头开始重新部署应用程序,关闭多个......都没有运气。
我上传的文件是 80k 到 9mb。
在我看来,上传太多文件会让整个事情变得疯狂,但我真的想不出解决方案。任何帮助,将不胜感激。
更新:在测试过程中,我发现onstart方法在第一次上传后总是触发不止一次。第一次它只触发一次。第二次上传大约 7-10 次,第三次它似乎一直在触发,直到我结束会话。这很奇怪,我认为这可能是问题的根源。对此有什么想法吗?
先感谢您!